§
    šŠtj k  ã            	       ó˜  — d dl Z d dlZd dlZd dlZd dl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 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 d d
lmZmZm Z m!Z!m"Z"m#Z#  e j$        e%¦  «        Z&defd„Z'dee(         fd„Z)dee(         fd„Z*	 	 dde(dedede+fd„Z,de(de(defd„Z- G d„ d¦  «        Z. G d„ dee¦  «        Z/dS )é    N)Údeepcopy)ÚPath)ÚAnyÚDictÚListÚOptionalÚSequenceÚUnion)ÚAgentActionÚAgentFinish)ÚBaseCallbackHandler)ÚDocument)Ú	LLMResult)Úget_from_dict_or_envÚguard_import)ÚBaseMetadataCallbackHandlerÚflatten_dictÚhash_stringÚimport_pandasÚimport_spacyÚimport_textstatÚreturnc                  ó    — t          d¦  «        S )zKImport the mlflow python package and raise an error if it is not installed.Úmlflow)r   © ó    úk/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/callbacks/mlflow_callback.pyÚimport_mlflowr      s   € å˜Ñ!Ô!Ð!r   c                  ó
   — g d¢S )z!Get the metrics to log to MLFlow.)ÚstepÚstartsÚendsÚerrorsÚtext_ctrÚchain_startsÚ
chain_endsÚ
llm_startsÚllm_endsÚllm_streamsÚtool_startsÚ	tool_endsÚ
agent_endsÚretriever_startsÚretriever_endsr   r   r   r   Úmlflow_callback_metricsr/   "   s   € ðð ð ð r   c                  ó
   — g d¢S )z.Get the text complexity metrics from textstat.)Ú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Úosmanr   r   r   r   Úget_text_complexity_metricsr@   7   s   € ðð ð ð r   ÚtextÚnlpÚtextstatc                 ó‚  ‡ ‡— i }‰�Gˆ ˆfd„t          ¦   «         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.
        textstat: The textstat library to use for complexity metrics calculation.

    Returns:
        `dict` containing the complexity metrics and visualization
            files serialized to  HTML string.
    Nc                 óD   •— i | ]}| t          ‰|¦  «        ‰¦  «        “ŒS r   )Úgetattr)Ú.0ÚkeyrA   rC   s     €€r   ú
<dictcomp>z analyze_text.<locals>.<dictcomp>_   s=   ø€ ð #
ð #
ð #
Ø25ˆCÐ'•˜ 3Ñ'Ô'¨Ñ-Ô-ð#
ð #
ð #
r   Útext_complexity_metricsÚdepFT)ÚstyleÚjupyterÚpageÚent)Údependency_treeÚentities)r@   Úupdater   ÚdisplacyÚrender)
rA   rB   rC   ÚresprJ   ÚspacyÚdocÚdep_outÚent_outÚtext_visualizationss
   ` `       r   Úanalyze_textr[   M   sù   øø€ ð  €DØÐð#
ð #
ð #
ð #
ð #
Ý9TÑ9VÔ9Vð#
ñ #
ô #
Ðð 	�ŠÐ.Ð0GÐHÑIÔIÐIØ�ŠÐ+Ñ,Ô,Ð,à
€Ý‘”ˆØˆc�$‰iŒiˆà”.×'Ò'¨°5À%ÈdÐ'ÑSÔSˆà”.×'Ò'¨°5À%ÈdÐ'ÑSÔSˆð  'Øð
ð 
Ðð
 	�ŠÐ'Ñ(Ô(Ð(à€Kr   ÚpromptÚ
generationc                 ól   — |                       dd¦  «        }|                      dd¦  «        }d|› d|› d�S )zÄConstruct an html element from a prompt and a generation.

    Parameters:
        prompt (str): The prompt.
        generation (str): The generation.

    Returns:
        (str): The html string.ú
z<br>z
    <p style="color:black;">z>:</p>
    <blockquote>
      <p style="color:green;">
        z"
      </p>
    </blockquote>
    )Úreplace)r\   r]   Úformatted_promptÚformatted_generations       r   Ú)construct_html_from_prompt_and_generationrc   w   sY   € ð —~’~ d¨FÑ3Ô3ÐØ%×-Ò-¨d°FÑ;Ô;ÐðØ-ðð ð 
ð	ð ð ð r   c            	       óF  — e Zd ZdZdefd„Z	 ddedeeef         dee         ddfd	„Z	dd
„Z
dededdfd„Z	 d deeeef         eeef         f         dee         ddfd„Zdeeef         deddfd„Zdededdfd„Zdededdfd„Zdededdfd„Zdeddfd„Zdeddfd„ZdS )!ÚMlflowLoggera’  Callback Handler that logs metrics and artifacts to mlflow server.

    Parameters:
        name (str): Name of the run.
        experiment (str): Name of the experiment.
        tags (dict): Tags to be attached for the run.
        tracking_uri (str): MLflow tracking server uri.

    This handler implements the helper functions to initialize,
    log metrics and artifacts to the mlflow server.
    Úkwargsc                 ód  — t          ¦   «         | _        dt          j        v rg| j                             d¦  «         | j        j        j                             ¦   «         | _        | j         	                    | j        ¦  «        | _
        nÕt          |ddd¦  «        }| j                             |¦  «         |                     d¦  «        x}r*| j                             |¦  «        j        j        | _        nht          |dd¦  «        }| j                             |¦  «        | _
        | j
        �| j
        j        | _        n| j                             |¦  «        | _        |                      |d	         |d
         |                     dd ¦  «        ¦  «         |                     dd¦  «        | _        d S )NÚDATABRICKS_RUNTIME_VERSIONÚ
databricksÚtracking_uriÚMLFLOW_TRACKING_URIÚ Úrun_idÚexperiment_nameÚMLFLOW_EXPERIMENT_NAMEÚrun_nameÚrun_tagsÚartifacts_dir)r   r   ÚosÚenvironÚset_tracking_uriÚtrackingÚfluentÚ_get_experiment_idÚ	mlf_expidÚget_experimentÚmlf_expr   ÚgetÚget_runÚinfoÚexperiment_idÚget_experiment_by_nameÚcreate_experimentÚ	start_runÚdir)Úselfrf   rj   rm   rn   s        r   Ú__init__zMlflowLogger.__init__š   s€  € Ý#‘o”oˆŒØ'­2¬:Ð5Ð5ØŒK×(Ò(¨Ñ6Ô6Ð6Ø!œ[Ô1Ô8×KÒKÑMÔMˆDŒNØœ;×5Ò5°d´nÑEÔEˆDŒLˆLå/Ø˜Ð(=¸rñô ˆLð ŒK×(Ò(¨Ñ6Ô6Ð6àŸš HÑ-Ô-Ð-ˆvð TØ!%¤×!4Ò!4°VÑ!<Ô!<Ô!AÔ!O�”�õ
 #7ØÐ-Ð/Gñ#ô #�ð  $œ{×AÒAÀ/ÑRÔR�”Ø”<Ð+Ø%)¤\Ô%?�D”N�Nà%)¤[×%BÒ%BÀ?Ñ%SÔ%S�D”Nà�ŠØ�:Ô  zÔ 2°F·J²J¸xÈÑ4NÔ4Nñ	
ô 	
ð 	
ð —:’:˜o¨rÑ2Ô2ˆŒˆˆr   NÚnameÚtagsrm   r   c                 ó\  — |€¢|                      d¦  «        rMd                     t          j        t          j        t          j        z   d¬¦  «        ¦  «        }|dd…         |z   }| j                             ¦   «          	                    | j
        ||¬¦  «        }|j        j        }|| _        dS )z¨
        If run_id is provided, it will reuse the run with the given run_id.
        Otherwise, it starts a new run, auto generates the random suffix for name.
        Nz-%rl   é   )Úkéÿÿÿÿ)rp   r‡   )ÚendswithÚjoinÚrandomÚchoicesÚstringÚascii_uppercaseÚdigitsr   ÚMlflowClientÚ
create_runry   r~   rm   )r„   r†   r‡   rm   ÚrnameÚruns         r   r‚   zMlflowLogger.start_runº   s§   € ð ˆ>Ø�}Š}˜TÑ"Ô"ð )ØŸšÝ”N¥6Ô#9½F¼MÑ#IÈQÐOÑOÔOñô �ð ˜C˜R˜C”y 5Ñ(�Ø”+×*Ò*Ñ,Ô,×7Ò7Ø”¨°Dð 8ñ ô ˆCð ”X”_ˆFØˆŒˆˆr   c                 ó8   — | j                              ¦   «          dS )zTo finish the run.N)r   Úend_run©r„   s    r   Ú
finish_runzMlflowLogger.finish_runÍ   s   € àŒ×ÒÑÔÐÐÐr   rH   Úvaluec                 óJ   — | j                              ||| j        ¬¦  «         dS )zTo log metric to mlflow server.©rm   N)r   Ú
log_metricrm   )r„   rH   r›   s      r   ÚmetriczMlflowLogger.metricÑ   s'   € àŒ×Ò˜s E°$´+ÐÑ>Ô>Ð>Ð>Ð>r   r   Údatar    c                 óH   — | j                              || j        ¬¦  «         dS )z%To log all metrics in the input dict.r�   N)r   Úlog_metricsrm   )r„   r    r    s      r   ÚmetricszMlflowLogger.metricsÕ   s'   € ð 	Œ×Ò ¨T¬[ÐÑ9Ô9Ð9Ð9Ð9r   Úfilenamec                 ó–   — | j                              |t          j                             | j        |› d�¦  «        | j        ¬¦  «         dS )z,To log the input data as json file artifact.z.jsonr�   N)r   Úlog_dictrs   Úpathr�   rƒ   rm   )r„   r    r¤   s      r   ÚjsonfzMlflowLogger.jsonfÛ   óO   € àŒ×ÒØ•"”'—,’,˜tœx¨HÐ);Ð);Ð);Ñ<Ô<ÀTÄ[ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r   Ú	dataframec                 ó\   — |                       |                     ¦   «         d|› �¦  «         dS )z1To log the input pandas dataframe as a html tableÚtable_N)ÚhtmlÚto_html)r„   r†   rª   s      r   ÚtablezMlflowLogger.tableá   s.   € à�	Š	�)×#Ò#Ñ%Ô% °  Ñ7Ô7Ð7Ð7Ð7r   r­   c                 ó–   — | j                              |t          j                             | j        |› d�¦  «        | j        ¬¦  «         dS )z3To log the input html string as html file artifact.z.htmlr�   N©r   Úlog_textrs   r§   r�   rƒ   rm   )r„   r­   r¤   s      r   r­   zMlflowLogger.htmlå   r©   r   rA   c                 ó–   — | j                              |t          j                             | j        |› d�¦  «        | j        ¬¦  «         dS )z,To log the input text as text file artifact.z.txtr�   Nr±   )r„   rA   r¤   s      r   rA   zMlflowLogger.textë   sO   € àŒ×ÒØ•"”'—,’,˜tœx¨HÐ):Ð):Ð):Ñ;Ô;ÀDÄKð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r   r§   c                 óH   — | j                              || j        ¬¦  «         dS )z/To upload the file from given path as artifact.r�   N)r   Úlog_artifactrm   )r„   r§   s     r   ÚartifactzMlflowLogger.artifactñ   s%   € àŒ× Ò  ¨d¬kÐ Ñ:Ô:Ð:Ð:Ð:r   Úchainc                 óT   — | j         j                             |d| j        ¬¦  «         d S )Nzlangchain-modelr�   )r   Ú	langchainÚ	log_modelrm   )r„   r·   s     r   Úlangchain_artifactzMlflowLogger.langchain_artifactõ   s+   € ØŒÔ×'Ò'¨Ð/@ÈÌÐ'ÑUÔUÐUÐUÐUr   ©N©r   N©r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r…   Ústrr   r   r‚   rš   ÚfloatrŸ   r
   Úintr£   r¨   r¯   r­   rA   r¶   r»   r   r   r   re   re   �   s  € € € € € ð
ð 
ð3 ð 3ð 3ð 3ð 3ðB HLðð ØðØ# C¨ Hœ~ðØ7?À´}ðà	ðð ð ð ð&ð ð ð ð?˜#ð ? eð ?°ð ?ð ?ð ?ð ?ð
 TUð:ð :Ø˜$˜s E˜zÔ*¨D°°c°¬NÐ:Ô;ð:ØCKÈCÄ=ð:à	ð:ð :ð :ð :ð
˜$˜s C˜xœ.ð 
°Cð 
¸Dð 
ð 
ð 
ð 
ð8˜#ð 8¨#ð 8°$ð 8ð 8ð 8ð 8ð
˜ð 
¨ð 
°ð 
ð 
ð 
ð 
ð
˜ð 
¨ð 
°ð 
ð 
ð 
ð 
ð;˜Sð ; Tð ;ð ;ð ;ð ;ðV¨ð V°ð Vð Vð Vð Vð Vð Vr   re   c                   ó¦  ‡ — e Zd ZdZ	 	 	 	 	 	 d3dee         dee         dee         d	ee         d
ee         deddfˆ fd„Zd4d„Zdeee	f         de
e         de	ddfd„Zdede	ddfd„Zdede	ddfd„Zdede	ddfd„Zdeee	f         deee	f         de	ddfd„Zdeeee	f         ee
e         f         de	ddfd„Zdede	ddfd„Zdeee	f         dede	ddfd„Zd e	de	ddfd!„Zdede	ddfd"„Zd#ede	ddfd$„Zd%ede	ddfd&„Zd'ede	de	fd(„Zdeee	f         d)ede	de	fd*„Zd+ee         de	de	fd,„Z dede	de	fd-„Z!de	fd.„Z"de#fd/„Z$d5d1e	d%e#ddfd2„Z%ˆ xZ&S )6ÚMlflowCallbackHandleraO  Callback Handler that logs metrics and artifacts to mlflow server.

    Parameters:
        name (str): Name of the run.
        experiment (str): Name of the experiment.
        tags (dict): Tags to be attached for the run.
        tracking_uri (str): MLflow tracking server uri.

    This handler will utilize the associated callback method called 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 mlflow server.
    úlangchainrun-%r¹   Nrl   r†   Ú
experimentr‡   rj   rm   rr   r   c                 ó²  •— t          ¦   «          t          ¦   «          t          ¦   «                              ¦   «          || _        || _        |pi | _        || _        || _        || _	        t          j        ¦   «         | _        t          | j        | j        | j        | j        | j        | j	        ¬¦  «        | _        g | _        d| _        	 t#          ¦   «         }	 |                     d¦  «        | _        n`# t&          $ r t(                               d¦  «         Y n:w xY w# t,          $ r)}t(                               |j        ¦  «         Y d}~nd}~ww xY w	 t1          ¦   «         | _        n=# t,          $ r0}t(                               |j        ¦  «         d| _        Y d}~nd}~ww xY wd„ t5          ¦   «         D ¦   «         | _        g g g g g g g g g g g g g dœ| _        dS )zInitialize callback handler.)rj   rn   rp   rq   rm   rr   NÚen_core_web_smzfRun `python -m spacy download en_core_web_sm` to download en_core_web_sm model for text visualization.c                 ó   — i | ]}|d “ŒS r¾   r   )rG   rH   s     r   rI   z2MlflowCallbackHandler.__init__.<locals>.<dictcomp>=  s   € ÐDÐDÐD 3˜˜QÐDÐDÐDr   )Úon_llm_start_recordsÚon_llm_token_recordsÚon_llm_end_recordsÚon_chain_start_recordsÚon_chain_end_recordsÚon_tool_start_recordsÚon_tool_end_recordsÚon_text_recordsÚon_agent_finish_recordsÚon_agent_action_recordsÚon_retriever_start_recordsÚon_retriever_end_recordsÚaction_records)r   r   Úsuperr…   r†   rÉ   r‡   rj   rm   rr   ÚtempfileÚTemporaryDirectoryÚtemp_dirre   ÚmlflgrÙ   rB   r   ÚloadÚOSErrorÚloggerÚwarningÚImportErrorÚmsgr   rC   r/   r£   Úrecords)
r„   r†   rÉ   r‡   rj   rm   rr   rV   ÚeÚ	__class__s
            €r   r…   zMlflowCallbackHandler.__init__  s  ø€ õ 	‰ŒˆÝ‰ŒˆÝ‰Œ×ÒÑÔÐàˆŒ	Ø$ˆŒØ�J˜BˆŒ	Ø(ˆÔØˆŒØ*ˆÔå Ô3Ñ5Ô5ˆŒå!ØÔ*Ø œOØ”YØ”YØ”;ØÔ,ð
ñ 
ô 
ˆŒ
ð %'ˆÔØˆŒð	Ý ‘N”NˆEðØ Ÿ:š:Ð&6Ñ7Ô7�”�øÝð ð ð Ý—’ðOñô ð ð ð ðøøøøõ ð 	"ð 	"ð 	"Ý�NŠN˜1œ5Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!øøøøð	"øøøð	!Ý+Ñ-Ô-ˆDŒMˆMøÝð 	!ð 	!ð 	!Ý�NŠN˜1œ5Ñ!Ô!Ð!Ø ˆDŒMˆMˆMˆMˆMˆMøøøøð	!øøøð EÐDÕ*AÑ*CÔ*CÐDÑDÔDˆŒð %'Ø$&Ø"$Ø&(Ø$&Ø%'Ø#%Ø!Ø')Ø')Ø*,Ø(*Ø ð(
ð (
ˆŒˆˆsB   Ã	D ÃC3 Ã3$DÄDÄ
EÄ'EÅEÅE( Å(
F"Å2&FÆF"c                 óª   — | j                              ¦   «         D ]\  }}d| j         |<   Œ| j                             ¦   «         D ]\  }}g | j        |<   Œd S )Nr   )r£   Úitemsrå   )r„   rŠ   Úvs      r   Ú_resetzMlflowCallbackHandler._resetO  sh   € Ø”L×&Ò&Ñ(Ô(ð 	 ð 	 ‰DˆAˆqØˆDŒL˜‰OˆOØ”L×&Ò&Ñ(Ô(ð 	!ð 	!‰DˆAˆqØ ˆDŒL˜‰OˆOð	!ð 	!r   Ú
serializedÚpromptsrf   c                 ó´  — | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         d         }i }|                     ddi¦  «         |                     t          |¦  «        ¦  «         |                     | j         ¦  «         | j                              | j         | j         d         ¬¦  «         t	          |¦  «        D ]z\  }}t          |¦  «        }||d<   | j        d	                              |¦  «         | j        d
                              |¦  «         | j                             |d|› d|› �¦  «         Œ{dS )zRun when LLM starts.r    é   r'   r!   ÚactionÚon_llm_start©r    r\   rÍ   rÙ   Ú
llm_start_Ú_prompt_N)	r£   rR   r   rÞ   Ú	enumerater   rå   Úappendr¨   )	r„   rì   rí   rf   r'   rU   Úidxr\   Úprompt_resps	            r   rñ   z"MlflowCallbackHandler.on_llm_startU  sz  € ð 	Œ�VÐÐÔ Ñ!ÐÐÑØŒ�\Ð"Ð"Ô" aÑ'Ð"Ð"Ñ"ØŒ�XÐÐÔ !Ñ#ÐÐÑà”\ ,Ô/ˆ
à!ˆØ�Š�X˜~Ð.Ñ/Ô/Ð/Ø�Š•L Ñ,Ô,Ñ-Ô-Ð-Ø�Š�D”LÑ!Ô!Ð!àŒ
×Ò˜4œ<¨d¬l¸6Ô.BÐÑCÔCÐCå$ WÑ-Ô-ð 	Rð 	R‰KˆC�Ý" 4™.œ.ˆKØ$*ˆK˜Ñ!ØŒLÐ/Ô0×7Ò7¸ÑDÔDÐDØŒLÐ)Ô*×1Ò1°+Ñ>Ô>Ð>ØŒJ×Ò˜[Ð*P°zÐ*PÐ*PÈ3Ð*PÐ*PÑQÔQÐQÐQð	Rð 	Rr   Útokenc                 óð  — | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         d         }i }|                     d|dœ¦  «         |                     | j         ¦  «         | j                              | j         | j         d         ¬¦  «         | j        d                              |¦  «         | j        d                              |¦  «         | j                             |d	|› �¦  «         d
S )z#Run when LLM generates a new token.r    rï   r)   Úon_llm_new_token)rð   rù   rò   rÎ   rÙ   Úllm_new_tokens_N©r£   rR   rÞ   rå   rö   r¨   )r„   rù   rf   r)   rU   s        r   rû   z&MlflowCallbackHandler.on_llm_new_tokenm  s  € àŒ�VÐÐÔ Ñ!ÐÐÑØŒ�]Ð#Ð#Ô# qÑ(Ð#Ð#Ñ#à”l =Ô1ˆà!ˆØ�ŠÐ1¸EÐBÐBÑCÔCÐCØ�Š�D”LÑ!Ô!Ð!àŒ
×Ò˜4œ<¨d¬l¸6Ô.BÐÑCÔCÐCàŒÐ+Ô,×3Ò3°DÑ9Ô9Ð9ØŒÐ%Ô&×-Ò-¨dÑ3Ô3Ð3ØŒ
×Ò˜Ð>°Ð>Ð>Ñ?Ô?Ð?Ð?Ð?r   Úresponsec           	      ó  — | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         d         }i }|                     ddi¦  «         |                     t          |j        pi ¦  «        ¦  «         |                     | j         ¦  «         | j                              | j         | j         d         ¬¦  «         |j        D �]ª}t          |¦  «        D �]–\  }}t          |¦  «        }|                     t          |                     ¦   «         ¦  «        ¦  «         |                     t          |j
        | j        | j        ¬¦  «        ¦  «         d	|v r<|                     d	¦  «        }	| j                              |	| j         d         ¬¦  «         | j        d
                              |¦  «         | j        d                              |¦  «         | j                             |d|› d|› �¦  «         d|v r8|d         }
| j                             |
dt%          |j
        ¦  «        z   ¦  «         d|v r8|d         }| j                             |dt%          |j
        ¦  «        z   ¦  «         �Œ˜�Œ¬dS )zRun when LLM ends running.r    rï   r(   r"   rð   Ú
on_llm_endrò   )rB   rC   rJ   rÏ   rÙ   Úllm_end_Ú_generation_rP   zdep-rQ   zent-N)r£   rR   r   Ú
llm_outputrÞ   Úgenerationsrõ   r   Údictr[   rA   rB   rC   Úpoprå   rö   r¨   r­   r   )r„   rþ   rf   r(   rU   r  r÷   r]   Úgeneration_respÚcomplexity_metricsrP   rQ   s               r   r   z MlflowCallbackHandler.on_llm_end~  sÁ  € àŒ�VÐÐÔ Ñ!ÐÐÑØŒ�ZÐ Ð Ô  AÑ%Ð Ð Ñ ØŒ�VÐÐÔ Ñ!ÐÐÑà”< 
Ô+ˆà!ˆØ�Š�X˜|Ð,Ñ-Ô-Ð-Ø�Š•L Ô!4Ð!:¸Ñ;Ô;Ñ<Ô<Ð<Ø�Š�D”LÑ!Ô!Ð!àŒ
×Ò˜4œ<¨d¬l¸6Ô.BÐÑCÔCÐCà#Ô/ð 	Uñ 	UˆKÝ#,¨[Ñ#9Ô#9ð Uñ U‘��ZÝ"*¨4¡.¤.�Ø×&Ò&¥|°J·O²OÑ4EÔ4EÑ'FÔ'FÑGÔGÐGØ×&Ò&Ý Ø"œØ œHØ!%¤ðñ ô ñô ð ð -°Ð?Ð?Ø;J×;NÒ;NØ1ñ<ô <Ð&ð ”J×&Ò&Ø*Ø!œ\¨&Ô1ð 'ñ ô ð ð ”Ð1Ô2×9Ò9¸/ÑJÔJÐJØ”Ð-Ô.×5Ò5°oÑFÔFÐFØ”
× Ò  Ð'M°(Ð'MÐ'MÈÐ'MÐ'MÑNÔNÐNØ$¨Ð7Ð7Ø&5Ð6GÔ&H�OØ”J—O’OØ'¨µ+¸j¼oÑ2NÔ2NÑ)Nñô ð ð  Ð0Ð0Ø.¨zÔ:�HØ”J—O’O H¨fµ{À:Ä?Ñ7SÔ7SÑ.SÑTÔTÐTùñ9Uð	Uð 	Ur   Úerrorc                 óZ   — | j         dxx         dz  cc<   | j         dxx         dz  cc<   dS )zRun when LLM errors.r    rï   r#   N©r£   ©r„   r	  rf   s      r   Úon_llm_errorz"MlflowCallbackHandler.on_llm_error¬  óD   € àŒ�VÐÐÔ Ñ!ÐÐÑØŒ�XÐÐÔ !Ñ#ÐÐÑÐÐr   Úinputsc                 óš  — | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         d         }i }|                     ddi¦  «         |                     t          |¦  «        ¦  «         |                     | j         ¦  «         | j                              | j         | j         d         ¬¦  «         t	          |t
          ¦  «        r2d                     d	„ |                     ¦   «         D ¦   «         ¦  «        }nDt	          |t          ¦  «        r d                     d
„ |D ¦   «         ¦  «        }nt          |¦  «        }t          |¦  «        }||d<   | j        d                              |¦  «         | j        d                              |¦  «         | j                             |d|› �¦  «         dS )zRun when chain starts running.r    rï   r%   r!   rð   Úon_chain_startrò   ú,c                 ó"   — g | ]\  }}|› d |› �‘ŒS ©ú=r   ©rG   rŠ   rê   s      r   ú
<listcomp>z8MlflowCallbackHandler.on_chain_start.<locals>.<listcomp>Ã  s&   € Ð#JÐ#JÐ#J±4°1°a q J J¨1 J JÐ#JÐ#JÐ#Jr   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   ©rÃ   )rG   Úinputs     r   r  z8MlflowCallbackHandler.on_chain_start.<locals>.<listcomp>Å  s   € Ð#CÐ#CÐ#C°5¥C¨¡J¤JÐ#CÐ#CÐ#Cr   r  rÐ   rÙ   Úchain_start_N)r£   rR   r   rÞ   Ú
isinstancer  r�   ré   ÚlistrÃ   r   rå   rö   r¨   )r„   rì   r  rf   r%   rU   Úchain_inputÚ
input_resps           r   r  z$MlflowCallbackHandler.on_chain_start±  sÈ  € ð 	Œ�VÐÐÔ Ñ!ÐÐÑØŒ�^Ð$Ð$Ô$¨Ñ)Ð$Ð$Ñ$ØŒ�XÐÐÔ !Ñ#ÐÐÑà”| NÔ3ˆà!ˆØ�Š�XÐ/Ð0Ñ1Ô1Ð1Ø�Š•L Ñ,Ô,Ñ-Ô-Ð-Ø�Š�D”LÑ!Ô!Ð!àŒ
×Ò˜4œ<¨d¬l¸6Ô.BÐÑCÔCÐCå�f�dÑ#Ô#ð 	&ØŸ(š(Ð#JÐ#J¸6¿<º<¹>¼>Ð#JÑ#JÔ#JÑKÔKˆKˆKÝ˜¥Ñ%Ô%ð 	&ØŸ(š(Ð#CÐ#C¸FÐ#CÑ#CÔ#CÑDÔDˆKˆKå˜f™+œ+ˆKÝ˜d‘^”^ˆ
Ø*ˆ
�8ÑØŒÐ-Ô.×5Ò5°jÑAÔAÐAØŒÐ%Ô&×-Ò-¨jÑ9Ô9Ð9ØŒ
×Ò˜Ð%B°LÐ%BÐ%BÑCÔCÐCÐCÐCr   Úoutputsc                 óB  — | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         d         }i }t          |t          ¦  «        r2d                     d„ |                     ¦   «         D ¦   «         ¦  «        }nMt          |t
          ¦  «        r)d                     t          t          |¦  «        ¦  «        }nt          |¦  «        }|                     d|dœ¦  «         |                     | j         ¦  «         | j	                              | j         | j         d         ¬	¦  «         | j
        d
                              |¦  «         | j
        d                              |¦  «         | j	                             |d|› �¦  «         dS )zRun when chain ends running.r    rï   r&   r"   r  c                 ó"   — g | ]\  }}|› d |› �‘ŒS r  r   r  s      r   r  z6MlflowCallbackHandler.on_chain_end.<locals>.<listcomp>Ú  s&   € Ð$LÐ$LÐ$L±D°A°q¨ Z Z¨A Z ZÐ$LÐ$LÐ$Lr   Úon_chain_end)rð   r   rò   rÑ   rÙ   Ú
chain_end_N)r£   r  r  r�   ré   r  ÚmaprÃ   rR   rÞ   rå   rö   r¨   )r„   r   rf   r&   rU   Úchain_outputs         r   r#  z"MlflowCallbackHandler.on_chain_endÎ  s–  € ð 	Œ�VÐÐÔ Ñ!ÐÐÑØŒ�\Ð"Ð"Ô" aÑ'Ð"Ð"Ñ"ØŒ�VÐÐÔ Ñ!ÐÐÑà”\ ,Ô/ˆ
à!ˆÝ�g�tÑ$Ô$ð 	(ØŸ8š8Ð$LÐ$L¸G¿MºM¹O¼OÐ$LÑ$LÔ$LÑMÔMˆLˆLÝ˜¥Ñ&Ô&ð 	(ØŸ8š8¥C­¨WÑ$5Ô$5Ñ6Ô6ˆLˆLå˜w™<œ<ˆLØ�Š˜~¸,ÐGÐGÑHÔHÐHØ�Š�D”LÑ!Ô!Ð!àŒ
×Ò˜4œ<¨d¬l¸6Ô.BÐÑCÔCÐCàŒÐ+Ô,×3Ò3°DÑ9Ô9Ð9ØŒÐ%Ô&×-Ò-¨dÑ3Ô3Ð3ØŒ
×Ò˜Ð8¨JÐ8Ð8Ñ9Ô9Ð9Ð9Ð9r   c                 óZ   — | j         dxx         dz  cc<   | j         dxx         dz  cc<   dS )zRun when chain errors.r    rï   r#   Nr  r  s      r   Úon_chain_errorz$MlflowCallbackHandler.on_chain_errorè  r  r   Ú	input_strc                 ó^  — | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         d         }i }|                     d|dœ¦  «         |                     t          |¦  «        ¦  «         |                     | j         ¦  «         | j                              | j         | j         d         ¬¦  «         | j        d                              |¦  «         | j        d	                              |¦  «         | j                             |d
|› �¦  «         dS )zRun when tool starts running.r    rï   r*   r!   Úon_tool_start)rð   r)  rò   rÒ   rÙ   Útool_start_N©r£   rR   r   rÞ   rå   rö   r¨   )r„   rì   r)  rf   r*   rU   s         r   r+  z#MlflowCallbackHandler.on_tool_startí  s:  € ð 	Œ�VÐÐÔ Ñ!ÐÐÑØŒ�]Ð#Ð#Ô# qÑ(Ð#Ð#Ñ#ØŒ�XÐÐÔ !Ñ#ÐÐÑà”l =Ô1ˆà!ˆØ�Š˜¸YÐGÐGÑHÔHÐHØ�Š•L Ñ,Ô,Ñ-Ô-Ð-Ø�Š�D”LÑ!Ô!Ð!àŒ
×Ò˜4œ<¨d¬l¸6Ô.BÐÑCÔCÐCàŒÐ,Ô-×4Ò4°TÑ:Ô:Ð:ØŒÐ%Ô&×-Ò-¨dÑ3Ô3Ð3ØŒ
×Ò˜Ð:¨[Ð:Ð:Ñ;Ô;Ð;Ð;Ð;r   Úoutputc                 ó8  — t          |¦  «        }| j        dxx         dz  cc<   | j        dxx         dz  cc<   | j        dxx         dz  cc<   | j        d         }i }|                     d|dœ¦  «         |                     | j        ¦  «         | j                             | j        | j        d         ¬¦  «         | j        d                              |¦  «         | j        d	                              |¦  «         | j                             |d
|› �¦  «         dS )zRun when tool ends running.r    rï   r+   r"   Úon_tool_end)rð   r.  rò   rÓ   rÙ   Ú	tool_end_N)rÃ   r£   rR   rÞ   rå   rö   r¨   )r„   r.  rf   r+   rU   s        r   r0  z!MlflowCallbackHandler.on_tool_end  s)  € å�V‘”ˆØŒ�VÐÐÔ Ñ!ÐÐÑØŒ�[Ð!Ð!Ô! QÑ&Ð!Ð!Ñ!ØŒ�VÐÐÔ Ñ!ÐÐÑà”L Ô-ˆ	à!ˆØ�Š˜}¸Ð?Ð?Ñ@Ô@Ð@Ø�Š�D”LÑ!Ô!Ð!àŒ
×Ò˜4œ<¨d¬l¸6Ô.BÐÑCÔCÐCàŒÐ*Ô+×2Ò2°4Ñ8Ô8Ð8ØŒÐ%Ô&×-Ò-¨dÑ3Ô3Ð3ØŒ
×Ò˜Ð6¨9Ð6Ð6Ñ7Ô7Ð7Ð7Ð7r   c                 óZ   — | j         dxx         dz  cc<   | j         dxx         dz  cc<   dS )zRun when tool errors.r    rï   r#   Nr  r  s      r   Úon_tool_errorz#MlflowCallbackHandler.on_tool_error  r  r   rA   c                 óð  — | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         d         }i }|                     d|dœ¦  «         |                     | j         ¦  «         | j                              | j         | j         d         ¬¦  «         | j        d                              |¦  «         | j        d                              |¦  «         | j                             |d	|› �¦  «         d
S )z,
        Run when text is received.
        r    rï   r$   Úon_text)rð   rA   rò   rÔ   rÙ   Úon_text_Nrý   )r„   rA   rf   r$   rU   s        r   r5  zMlflowCallbackHandler.on_text  s  € ð 	Œ�VÐÐÔ Ñ!ÐÐÑØŒ�ZÐ Ð Ô  AÑ%Ð Ð Ñ à”< 
Ô+ˆà!ˆØ�Š˜y°$Ð7Ð7Ñ8Ô8Ð8Ø�Š�D”LÑ!Ô!Ð!àŒ
×Ò˜4œ<¨d¬l¸6Ô.BÐÑCÔCÐCàŒÐ&Ô'×.Ò.¨tÑ4Ô4Ð4ØŒÐ%Ô&×-Ò-¨dÑ3Ô3Ð3ØŒ
×Ò˜Ð4¨(Ð4Ð4Ñ5Ô5Ð5Ð5Ð5r   Úfinishc                 ó<  — | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         d         }i }|                     d|j        d         |j        dœ¦  «         |                     | j         ¦  «         | j                              | j         | j         d         ¬¦  «         | j        d	                              |¦  «         | j        d
                              |¦  «         | j                             |d|› �¦  «         dS )zRun when agent ends running.r    rï   r,   r"   Úon_agent_finishr.  )rð   r.  Úlogrò   rÕ   rÙ   Úagent_finish_N)r£   rR   Úreturn_valuesr:  rÞ   rå   rö   r¨   )r„   r7  rf   r,   rU   s        r   r9  z%MlflowCallbackHandler.on_agent_finish-  s9  € àŒ�VÐÐÔ Ñ!ÐÐÑØŒ�\Ð"Ð"Ô" aÑ'Ð"Ð"Ñ"ØŒ�VÐÐÔ Ñ!ÐÐÑà”\ ,Ô/ˆ
Ø!ˆØ�Šà+Ø Ô.¨xÔ8Ø”zðð ñ	
ô 	
ð 	
ð 	�Š�D”LÑ!Ô!Ð!àŒ
×Ò˜4œ<¨d¬l¸6Ô.BÐÑCÔCÐCàŒÐ.Ô/×6Ò6°tÑ<Ô<Ð<ØŒÐ%Ô&×-Ò-¨dÑ3Ô3Ð3ØŒ
×Ò˜Ð;¨zÐ;Ð;Ñ<Ô<Ð<Ð<Ð<r   rð   c                 ó<  — | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         d         }i }|                     d|j        |j        |j        dœ¦  «         |                     | j         ¦  «         | j                              | j         | j         d         ¬¦  «         | j        d                              |¦  «         | j        d	                              |¦  «         | j                             |d
|› �¦  «         dS )zRun on agent action.r    rï   r*   r!   Úon_agent_action)rð   ÚtoolÚ
tool_inputr:  rò   rÖ   rÙ   Úagent_action_N)	r£   rR   r?  r@  r:  rÞ   rå   rö   r¨   )r„   rð   rf   r*   rU   s        r   r>  z%MlflowCallbackHandler.on_agent_actionD  s9  € àŒ�VÐÐÔ Ñ!ÐÐÑØŒ�]Ð#Ð#Ô# qÑ(Ð#Ð#Ñ#ØŒ�XÐÐÔ !Ñ#ÐÐÑà”l =Ô1ˆØ!ˆØ�Šà+ØœØ$Ô/Ø”zð	ð ñ	
ô 	
ð 	
ð 	�Š�D”LÑ!Ô!Ð!ØŒ
×Ò˜4œ<¨d¬l¸6Ô.BÐÑCÔCÐCØŒÐ.Ô/×6Ò6°tÑ<Ô<Ð<ØŒÐ%Ô&×-Ò-¨dÑ3Ô3Ð3ØŒ
×Ò˜Ð<¨{Ð<Ð<Ñ=Ô=Ð=Ð=Ð=r   Úqueryc                 ó^  — | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         d         }i }|                     d|dœ¦  «         |                     t          |¦  «        ¦  «         |                     | j         ¦  «         | j                              | j         | j         d         ¬¦  «         | j        d                              |¦  «         | j        d	                              |¦  «         | j                             |d
|› �¦  «         dS )z"Run when Retriever starts running.r    rï   r-   r!   Úon_retriever_start)rð   rB  rò   r×   rÙ   Úretriever_start_Nr-  )r„   rì   rB  rf   r-   rU   s         r   rD  z(MlflowCallbackHandler.on_retriever_startZ  s?  € ð 	Œ�VÐÐÔ Ñ!ÐÐÑØŒÐ'Ð(Ð(Ô(¨AÑ-Ð(Ð(Ñ(ØŒ�XÐÐÔ !Ñ#ÐÐÑàœ<Ð(:Ô;Ðà!ˆØ�ŠÐ3¸eÐDÐDÑEÔEÐEØ�Š•L Ñ,Ô,Ñ-Ô-Ð-Ø�Š�D”LÑ!Ô!Ð!àŒ
×Ò˜4œ<¨d¬l¸6Ô.BÐÑCÔCÐCàŒÐ1Ô2×9Ò9¸$Ñ?Ô?Ð?ØŒÐ%Ô&×-Ò-¨dÑ3Ô3Ð3ØŒ
×Ò˜ÐDÐ2BÐDÐDÑEÔEÐEÐEÐEr   Ú	documentsc                 ó2  — | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         dxx         dz  cc<   | j         d         }i }d„ |D ¦   «         }|                     d|dœ¦  «         |                     | j         ¦  «         | j                              | j         | j         d         ¬¦  «         | j        d	                              |¦  «         | j        d
                              |¦  «         | j                             |d|› �¦  «         dS )z Run when Retriever ends running.r    rï   r.   r"   c                 ód   — g | ]-}|j         d „ |j                             ¦   «         D ¦   «         dœ‘Œ.S )c                 óœ   — i | ]I\  }}|t          |t          ¦  «        st          |¦  «        nd                      d„ |D ¦   «         ¦  «        “ŒJS )r  c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r¼   r  )rG   Úxs     r   ú	<genexpr>zOMlflowCallbackHandler.on_retriever_end.<locals>.<listcomp>.<dictcomp>.<genexpr>†  s(   è è € Ð%8Ð%8°¥c¨!¡f¤fÐ%8Ð%8Ð%8Ð%8Ð%8Ð%8r   )r  r  rÃ   r�   r  s      r   rI   zEMlflowCallbackHandler.on_retriever_end.<locals>.<listcomp>.<dictcomp>‚  sh   € ð ð ð ñ ˜˜1ð å)¨!­TÑ2Ô2ð9�˜A™œ˜à ŸXšXÐ%8Ð%8°aÐ%8Ñ%8Ô%8Ñ8Ô8ð	ð ð r   )Úpage_contentÚmetadata)rM  rN  ré   )rG   rW   s     r   r  z:MlflowCallbackHandler.on_retriever_end.<locals>.<listcomp>  sc   € ð 
ð 
ð 
ð ð !$Ô 0ðð ð !$¤× 2Ò 2Ñ 4Ô 4ðñ ô ð
ð 
ð
ð 
ð 
r   Úon_retriever_end)rð   rF  rò   rØ   rÙ   Úretriever_end_Nrý   )r„   rF  rf   r.   rU   Úretriever_documentss         r   rO  z&MlflowCallbackHandler.on_retriever_endr  sG  € ð 	Œ�VÐÐÔ Ñ!ÐÐÑØŒÐ%Ð&Ð&Ô&¨!Ñ+Ð&Ð&Ñ&ØŒ�VÐÐÔ Ñ!ÐÐÑàœÐ&6Ô7ˆà!ˆð
ð 
ð !ð
ñ 
ô 
Ðð 	�ŠÐ1Ð@SÐTÐTÑUÔUÐUØ�Š�D”LÑ!Ô!Ð!àŒ
×Ò˜4œ<¨d¬l¸6Ô.BÐÑCÔCÐCàŒÐ/Ô0×7Ò7¸Ñ=Ô=Ð=ØŒÐ%Ô&×-Ò-¨dÑ3Ô3Ð3ØŒ
×Ò˜Ð@°Ð@Ð@ÑAÔAÐAÐAÐAr   c                 óZ   — | j         dxx         dz  cc<   | j         dxx         dz  cc<   dS )zRun when Retriever errors.r    rï   r#   Nr  r  s      r   Úon_retriever_errorz(MlflowCallbackHandler.on_retriever_error–  r  r   c                 ó,  ‡
— t          ¦   «         }|                     | j        d         ¦  «        }|                     | j        d         ¦  «        Š
ddg}d|j        v r|                     d¦  «         n=d|j        v r4|d                              d„ ¦  «        |d<   |                     d¦  «         ||                              d¬	¦  «                             dd
id¬	¦  «        }| j        �t          ¦   «         ng }| j
        �ddgng }g d¢}ˆ
fd„|D ¦   «         }‰
ddg|z   |z   |z                                 d¬	¦  «                             dddœd¬	¦  «        }|                     ||gd¬	¦  «        }	|	ddg                              d„ d¬	¦  «        |	d<   |	S )z=Create a dataframe with all the information from the session.rÍ   rÏ   r    r\   r†   Úidc                 ó   — | d         S )Nr‹   r   )Úid_s    r   ú<lambda>zCMlflowCallbackHandler._create_session_analysis_df.<locals>.<lambda>¨  s
   € ˜C œG€ r   rï   )ÚaxisÚprompt_stepNrP   rQ   )Útoken_usage_total_tokensÚtoken_usage_prompt_tokensÚtoken_usage_completion_tokensc                 ó&   •— g | ]}|‰j         v ¯|‘ŒS r   )Úcolumns)rG   rK  Úon_llm_end_records_dfs     €r   r  zEMlflowCallbackHandler._create_session_analysis_df.<locals>.<listcomp>¼  s.   ø€ ð 
ð 
ð 
Ø¨aÐ3HÔ3PÐ.PÐ.PˆAÐ.PÐ.PÐ.Pr   rA   Úoutput_stepr.  )r    rA   c                 ó:   — t          | d         | d         ¦  «        S )Nr\   r.  )rc   )Úrows    r   rX  zCMlflowCallbackHandler._create_session_analysis_df.<locals>.<lambda>Ñ  s   € ÕAØ�H”˜s 8œ}ñô € r   Ú	chat_html)r   Ú	DataFramerå   r_  rö   ÚapplyÚdropnaÚrenamerC   r@   rB   Úconcat)r„   ÚpdÚon_llm_start_records_dfÚllm_input_columnsÚllm_input_prompts_dfÚcomplexity_metrics_columnsÚvisualizations_columnsÚtoken_usage_columnsÚllm_outputs_dfÚsession_analysis_dfr`  s             @r   Ú_create_session_analysis_dfz1MlflowCallbackHandler._create_session_analysis_df›  s(  ø€ å‰_Œ_ˆØ"$§,¢,¨t¬|Ð<RÔ/SÑ"TÔ"TÐØ "§¢¨T¬\Ð:NÔ-OÑ PÔ PÐà# XÐ.ÐØÐ,Ô4Ð4Ð4Ø×$Ò$ VÑ,Ô,Ð,Ð,ØÐ,Ô4Ð4Ð4ð /FÀdÔ.K×.QÒ.QØ#Ð#ñ/ô /Ð# FÑ+ð ×$Ò$ VÑ,Ô,Ð,à#Ð$5Ô6ßŠV˜ˆV‰^Œ^ßŠV�V˜]Ð+°!ˆVÑ4Ô4ð 	ð .2¬]Ð-FÕ'Ñ)Ô)Ð)ÈBð 	#ð 04¬xÐ/CÐ 
Ð+Ð+Èð 	ð
ð 
ð 
Ðð

ð 
ð 
ð 
Ø*ð
ñ 
ô 
Ðð
 "àØðð &ñ	&ð
 -ñ-ð )ñ)ô÷ ŠV˜ˆV‰^Œ^ßŠV˜]°HÐ=Ð=ÀAˆVÑFÔFð 	ð !ŸišiÐ)=¸~Ð(NÐUV˜iÑWÔWÐØ+>Ø�xÐ ô,
ç
Š%ðð ð ð	 ñ 
ô 
ð 	˜KÑ(ð #Ð"r   c                 ó6   — t          | j        d         ¦  «        S )NrÍ   )Úboolrå   r™   s    r   Ú_contain_llm_recordsz*MlflowCallbackHandler._contain_llm_recordsØ  s   € Ý�D”LÐ!7Ô8Ñ9Ô9Ð9r   FÚlangchain_assetc                 ó@  — t          ¦   «         }| j                             d|                     | j        d         ¦  «        ¦  «         |                      ¦   «         r¯|                      ¦   «         }|                     d¦  «        }|                     ddd¬¦  «        }| j                             d|                     |¦  «        ¦  «         | j         	                    d 
                    |                     ¦   «         ¦  «        d¦  «         |�r_dt          t          |¦  «        ¦  «        v r| j                             |¦  «         �n%t          t          | j        j        d	¦  «        ¦  «        }	 |                     |¦  «         | j                             |¦  «         nÍ# t(          $ r“ 	 |                     |¦  «         | j                             |¦  «         n_# t,          $ r% t/          d
¦  «         t1          j        ¦   «          Y n1t4          $ r% t/          d
¦  «         t1          j        ¦   «          Y nw xY wY n1t4          $ r% t/          d
¦  «         t1          j        ¦   «          Y nw xY w|r/| j                             ¦   «          |                      ¦   «          d S d S )NrÙ   rd  r_   rl   T)ÚregexÚsession_analysiszlangchain.chains.llm.LLMChainz
model.jsonzCould not save model.)r   rÞ   r¯   re  rå   rv  rs  r  r`   r­   r�   ÚtolistrÃ   Útyper»   r   rÝ   r†   Úsaver¶   Ú
ValueErrorÚ
save_agentÚAttributeErrorÚprintÚ	tracebackÚ	print_excÚNotImplementedErrorrš   rë   )r„   rw  r7  rj  rr  rd  Úlangchain_asset_paths          r   Úflush_trackerz#MlflowCallbackHandler.flush_trackerÛ  s£  € Ý‰_Œ_ˆØŒ
×ÒÐ)¨2¯<ª<¸¼ÐEUÔ8VÑ+WÔ+WÑXÔXÐXØ×$Ò$Ñ&Ô&ð 	FØ"&×"BÒ"BÑ"DÔ"DÐØ+×/Ò/°Ñ<Ô<ˆIØ!×)Ò)¨$°¸$Ð)Ñ?Ô?ˆIØŒJ×ÒÐ/°·²Ð>QÑ1RÔ1RÑSÔSÐSØŒJ�OŠO˜BŸGšG I×$4Ò$4Ñ$6Ô$6Ñ7Ô7¸ÑEÔEÐEàñ 	ð /µ#µd¸?Ñ6KÔ6KÑ2LÔ2LÐLÐLØ”
×-Ò-¨oÑ>Ô>Ð>Ñ>å'*­4°´Ô0BÀLÑ+QÔ+QÑ'RÔ'RÐ$ðØ#×(Ò(Ð)=Ñ>Ô>Ð>Ø”J×'Ò'Ð(<Ñ=Ô=Ð=Ð=øÝ!ð ð ð ð
Ø'×2Ò2Ð3GÑHÔHÐHØœ
×+Ò+Ð,@ÑAÔAÐAÐAøÝ)ð ð ð ÝÐ5Ñ6Ô6Ð6Ý!Ô+Ñ-Ô-Ð-Ø˜Ý.ð ð ð ÝÐ5Ñ6Ô6Ð6Ý!Ô+Ñ-Ô-Ð-Ø˜ðøøøøøõ +ð ð ð ÝÐ1Ñ2Ô2Ð2ÝÔ'Ñ)Ô)Ð)Ø�Dðøøøð ð 	ØŒJ×!Ò!Ñ#Ô#Ð#Ø�KŠK‰MŒMˆMˆMˆMð	ð 	sH   Å0/F  Æ 
I*Æ+/GÇI*Ç,H7ÈI*È	+H7È4I*È6H7È7I*È<+I*É)I*)rÈ   r¹   NNNrl   r½   )NF)'r¿   rÀ   rÁ   rÂ   r   rÃ   r   r…   rë   r   r   rñ   rû   r   r   ÚBaseExceptionr  r  r
   r#  r(  r+  r0  r3  r5  r   r9  r   r>  rD  r	   r   rO  rS  rs  ru  rv  r†  Ú__classcell__)rç   s   @r   rÇ   rÇ   ù   s…  ø€ € € € € ðð ð  /Ø$/Ø#Ø&*Ø $ØðE
ð E
à�sŒmðE
ð ˜S”MðE
ð �tŒnð	E
ð
 ˜s”mðE
ð ˜”ðE
ð ðE
ð 
ðE
ð E
ð E
ð E
ð E
ð E
ðN!ð !ð !ð !ðRØ˜s C˜xœ.ðRØ37¸´9ðRØHKðRà	ðRð Rð Rð Rð0@ cð @°Sð @¸Tð @ð @ð @ð @ð",U 9ð ,U¸ð ,UÀð ,Uð ,Uð ,Uð ,Uð\$ -ð $¸3ð $À4ð $ð $ð $ð $ð
DØ˜s C˜xœ.ðDØ26°s¸C°x´.ðDØLOðDà	ðDð Dð Dð Dð::Ø˜T # s (œ^¨S°$°s´)Ð;Ô<ð:ØHKð:à	ð:ð :ð :ð :ð4$ Mð $¸Sð $ÀTð $ð $ð $ð $ð
<Ø˜s C˜xœ.ð<Ø58ð<ØDGð<à	ð<ð <ð <ð <ð*8 #ð 8°ð 8¸ð 8ð 8ð 8ð 8ð&$ =ð $¸Cð $ÀDð $ð $ð $ð $ð
6˜Cð 6¨3ð 6°4ð 6ð 6ð 6ð 6ð&= kð =¸Sð =ÀTð =ð =ð =ð =ð.> kð >¸Sð >ÀSð >ð >ð >ð >ð,Fà˜˜c˜”NðFð ðFð ð	Fð
 
ðFð Fð Fð Fð0"Bà˜HÔ%ð"Bð ð"Bð 
ð	"Bð "Bð "Bð "BðH$¨ð $Àð $Èð $ð $ð $ð $ð
;#¨Sð ;#ð ;#ð ;#ð ;#ðz: dð :ð :ð :ð :ð&ð &¨Sð &Àð &ÐRVð &ð &ð &ð &ð &ð &ð &ð &r   rÇ   )NN)0Úloggingrs   rŽ   r�   rÛ   r‚  Úcopyr   Úpathlibr   Útypingr   r   r   r   r	   r
   Úlangchain_core.agentsr   r   Úlangchain_core.callbacksr   Úlangchain_core.documentsr   Úlangchain_core.outputsr   Úlangchain_core.utilsr   r   Ú#langchain_community.callbacks.utilsr   r   r   r   r   r   Ú	getLoggerr¿   rá   r   rÃ   r/   r@   r  r[   rc   re   rÇ   r   r   r   ú<module>r”     sŸ  ðØ €€€Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =à :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø -Ð -Ð -Ð -Ð -Ð -Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€ð"�sð "ð "ð "ð "ð
  c¤ð ð ð ð ð* T¨#¤Yð ð ð ð ð0 Øð'ð 'Ø
ð'à	ð'ð ð'ð 
ð	'ð 'ð 'ð 'ðT°cð Àsð Èsð ð ð ð ð,iVð iVð iVð iVð iVñ iVô iVð iVðXHð Hð Hð Hð HÐ7Ð9Lñ Hô Hð Hð Hð Hr   