§
    šŠtjë+  ã                  óê   — d Z ddlmZ ddlZddl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 ddlZddlmZmZ dd	lmZ dd
lmZ e
r
ddlZddlmZ dZdZdZdZdZ dd„Z! G d„ de¦  «        Z"dS )zArthurAI's Callback Handler.é    )ÚannotationsN)Údefaultdict)Údatetime)Útime)ÚTYPE_CHECKINGÚAnyÚDefaultDictÚDictÚListÚOptional)ÚAgentActionÚAgentFinish)ÚBaseCallbackHandler)Ú	LLMResult)ÚArthurModelÚprompt_tokensÚcompletion_tokensÚtoken_usageÚfinish_reasonÚdurationÚreturnÚarthuraic                 óV   — 	 ddl } n"# t          $ r}t          d|¦  «        ‚d}~ww xY w| S )zLazy load Arthur.r   NzpTo use the ArthurCallbackHandler you need the `arthurai` package. Please install it with `pip install arthurai`.)r   ÚImportError)r   Úes     úk/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/callbacks/arthur_callback.pyÚ_lazy_load_arthurr      sT   € ð
ØˆˆˆˆøÝð 
ð 
ð 
Ýð'ð ñ	
ô 
ð 	
øøøøð
øøøð €Os   ‚ ‡
&‘!¡&c                  ó²   ‡ — e Zd ZdZd3ˆ fd„Ze	 	 	 d4d5d„¦   «         Zd6d„Zd7d„Zd8d„Z	d9d„Z
d:d „Zd;d"„Zd:d#„Zd<d%„Zd=d(„Z	 	 d>d?d,„Zd:d-„Zd@d/„ZdAd2„Zˆ xZS )BÚArthurCallbackHandlera÷  Callback Handler that logs to Arthur platform.

    Arthur helps enterprise teams optimize model operations
    and performance at scale. The Arthur API tracks model
    performance, explainability, and fairness across tabular,
    NLP, and CV models. Our API is model- and platform-agnostic,
    and continuously scales with complex and dynamic enterprise needs.
    To learn more about Arthur, visit our website at
    https://www.arthur.ai/ or read the Arthur docs at
    https://docs.arthur.ai/
    Úarthur_modelr   r   ÚNonec                ó  •‡‡— t          ¦   «                              ¦   «          t          ¦   «         }|j        j        j        Š|j        j        j        Š|| _        t          d„ | j         	                    ¦   «         D ¦   «         ¦  «        | _
        ˆˆfd„| j         	                    ¦   «         D ¦   «         d         j        | _        ˆˆfd„| j         	                    ¦   «         D ¦   «         d         j        | _        d| _        t          ˆfd„| j         	                    ¦   «         D ¦   «         ¦  «        dk    r5ˆfd„| j         	                    ¦   «         D ¦   «         d         j        | _        t!          t"          ¦  «        | _        dS )zInitialize callback handler.c                ó   — g | ]	}|j         ‘Œ
S © )Úname)Ú.0Úas     r   ú
<listcomp>z2ArthurCallbackHandler.__init__.<locals>.<listcomp>D   s   € ÐRÐRÐR¨!˜qœvÐRÐRÐRó    c                óT   •— g | ]$}|j         ‰j        k    r|j        ‰j        k    ¯"|‘Œ%S r$   )ÚstageÚModelPipelineInputÚ
value_typeÚUnstructured_Text©r&   ÚxÚStageÚ	ValueTypes     €€r   r(   z2ArthurCallbackHandler.__init__.<locals>.<listcomp>E   sE   ø€ ð 
ð 
ð 
àØŒw˜%Ô2Ò2Ð2Ø” 	Ô ;Ò;Ð;ð ð <Ð;Ð;r)   r   c                óT   •— g | ]$}|j         ‰j        k    r|j        ‰j        k    ¯"|‘Œ%S r$   )r+   ÚPredictedValuer-   r.   r/   s     €€r   r(   z2ArthurCallbackHandler.__init__.<locals>.<listcomp>K   sE   ø€ ð 
ð 
ð 
àØŒw˜%Ô.Ò.Ð.Ø” 	Ô ;Ò;Ð;ð ð <Ð;Ð;r)   Nc                ó4   •— g | ]}|j         ‰j        k    ¯|‘ŒS r$   ©r-   ÚTokenLikelihoods©r&   r0   r2   s     €r   r(   z2ArthurCallbackHandler.__init__.<locals>.<listcomp>T   s3   ø€ ð ð ð àØ”| yÔ'AÒAÐAð àAÐAÐAr)   c                ó4   •— g | ]}|j         ‰j        k    ¯|‘ŒS r$   r6   r8   s     €r   r(   z2ArthurCallbackHandler.__init__.<locals>.<listcomp>\   s3   ø€ ð *ð *ð *àØ”< 9Ô#=Ò=Ð=ð à=Ð=Ð=r)   )ÚsuperÚ__init__r   ÚcommonÚ	constantsr1   r2   r    ÚsetÚget_attributesÚ
attr_namesr%   Ú
input_attrÚoutput_attrÚtoken_likelihood_attrÚlenr   ÚdictÚrun_map)Úselfr    r   r1   r2   Ú	__class__s      @@€r   r;   zArthurCallbackHandler.__init__8   sÖ  øøø€ õ
 	‰Œ×ÒÑÔÐÝ$Ñ&Ô&ˆØ”Ô)Ô/ˆØ”OÔ-Ô7ˆ	Ø(ˆÔõ ÐRÐR¨tÔ/@×/OÒ/OÑ/QÔ/QÐRÑRÔRÑSÔSˆŒð
ð 
ð 
ð 
ð 
àÔ&×5Ò5Ñ7Ô7ð
ñ 
ô 
ð
 ôô
 ð 	Œð
ð 
ð 
ð 
ð 
àÔ&×5Ò5Ñ7Ô7ð
ñ 
ô 
ð
 ôô
 ð 	Ôð &*ˆÔ"åðð ð ð à!Ô.×=Ò=Ñ?Ô?ðñ ô ñô ð òð ð*ð *ð *ð *àÔ*×9Ò9Ñ;Ô;ð*ñ *ô *ð ô	*ô ð	 Ô&õ /:½$Ñ.?Ô.?ˆŒˆˆr)   úhttps://app.arthur.aiNÚmodel_idÚstrÚ
arthur_urlúOptional[str]Úarthur_loginÚarthur_passwordc                óˆ  — t          ¦   «         }|j        }|j        j        j        }|€?	 t
          j        d         }n# t          $ r t          d¦  «        ‚w xY w |||¬¦  «        }	n|€ |||¬¦  «        }	n ||||¬¦  «        }		 |	 	                    |¦  «        }
n# |$ r t          d|› d�¦  «        ‚w xY w | |
¦  «        S )	aX  Initialize callback handler from Arthur credentials.

        Args:
            model_id (str): The ID of the arthur model to log to.
            arthur_url (str, optional): The URL of the Arthur instance to log to.
                Defaults to "https://app.arthur.ai".
            arthur_login (str, optional): The login to use to connect to Arthur.
                Defaults to None.
            arthur_password (str, optional): The password to use to connect to
                Arthur. Defaults to None.

        Returns:
            ArthurCallbackHandler: The initialized callback handler.
        NÚARTHUR_API_KEYzˆNo Arthur authentication provided. Either give a login to the ArthurCallbackHandler or set an ARTHUR_API_KEY as an environment variable.)ÚurlÚ
access_key)rR   Úlogin)rR   rT   Úpasswordz%Was unable to retrieve model with id zl from Arthur. Make sure the ID corresponds to a model that is currently registered with your Arthur account.)
r   ÚArthurAIr<   Ú
exceptionsÚResponseClientErrorÚosÚenvironÚKeyErrorÚ
ValueErrorÚ	get_model)ÚclsrJ   rL   rN   rO   r   rV   rX   Úarthur_api_keyÚarthurr    s              r   Úfrom_credentialsz&ArthurCallbackHandler.from_credentialsd   s4  € õ, %Ñ&Ô&ˆØÔ$ˆØ&œoÔ8ÔLÐð ÐðÝ!#¤Ð,<Ô!=��øÝð ð ð Ý ðLñô ð ðøøøð �X *¸ÐHÑHÔHˆFˆFàÐ&Ø!˜ j¸ÐEÑEÔE��à!˜Ø"¨,Àðñ ô �ð	Ø!×+Ò+¨HÑ5Ô5ˆLˆLøØ"ð 	ð 	ð 	Ýð8¸ð 8ð 8ð 8ñô ð ð	øøøð ˆs�<Ñ Ô Ð s   ª= ½AÂB ÂB6Ú
serializedúDict[str, Any]Úpromptsú	List[str]Úkwargsr   c                ón   — |d         }|| j         |         d<   t          ¦   «         | j         |         d<   dS )z$On LLM start, save the input promptsÚrun_idÚinput_textsÚ
start_timeN)rF   r   )rG   rb   rd   rf   rh   s        r   Úon_llm_startz"ArthurCallbackHandler.on_llm_start›   s:   € ð ˜Ô!ˆØ.5ˆŒ�VÔ˜]Ñ+Ý-1©V¬VˆŒ�VÔ˜\Ñ*Ð*Ð*r)   Úresponser   c           
     óÄ  ‡— 	 ddl }n"# t          $ r}t          d¦  «        |‚d}~ww xY w|d         }	 | j        |         }n"# t          $ r}t          d¦  «        |‚d}~ww xY wt	          ¦   «         |d         z
  }g }t          |j        ¦  «        D �]´\  }	}
|
D �]ª}dt          t          j	        ¦   «         ¦  «        dt          j        |j        ¬	¦  «        | j        |d
         |	         | j        |j        i}|j        �†t"          |j        v r(t"          | j        v r|j        t"                   |t"          <   |j        d         }|�A| j        �:|d         Šˆfd„t)          t+          ‰¦  «        ¦  «        D ¦   «         }||| j        <   t-          |j        t0          ¦  «        rxt2          |j        v rj|j        t2                   }t4          |v r#t4          | j        v r|t4                   |t4          <   t6          |v r#t6          | j        v r|t6                   |t6          <   t8          | j        v r
||t8          <   |                     |¦  «         �Œ¬�Œ¶| j                             |¦  «         dS )z On LLM end, send data to Arthur.r   NzACould not import pytz. Please install it with 'pip install pytz'.rh   z~This function has been called with a run_id that was never registered in on_llm_start(). Restart and try running the LLM againrj   Úpartner_inference_idÚinference_timestamp)Útzri   ÚlogprobsÚtop_logprobsc                óX   •— g | ]&}d „ ‰|                               ¦   «         D ¦   «         ‘Œ'S )c                ó>   — i | ]\  }}|t          j        |¦  «        “ŒS r$   )ÚnpÚexp)r&   ÚkÚvs      r   ú
<dictcomp>z?ArthurCallbackHandler.on_llm_end.<locals>.<listcomp>.<dictcomp>Ü   s&   € ÐJÐJÐJ©d¨a°˜Q¥¤ q¡	¤	ÐJÐJÐJr)   )Úitems)r&   Úirq   s     €r   r(   z4ArthurCallbackHandler.on_llm_end.<locals>.<listcomp>Û   sH   ø€ ð 'ð 'ð 'à !ð KÐJ°h¸q´k×6GÒ6GÑ6IÔ6IÐJÑJÔJð'ð 'ð 'r)   ) Úpytzr   rF   r[   r   Ú	enumerateÚgenerationsrK   ÚuuidÚuuid4r   ÚnowÚUTCrA   rB   ÚtextÚgeneration_infoÚFINISH_REASONr@   rC   ÚrangerD   Ú
isinstanceÚ
llm_outputrE   ÚTOKEN_USAGEÚPROMPT_TOKENSÚCOMPLETION_TOKENSÚDURATIONÚappendr    Úsend_inferences)rG   rl   rf   r|   r   rh   Úrun_map_dataÚtime_from_start_to_endÚ
inferencesr{   r~   Ú
generationÚ	inferenceÚlogprobs_dataÚlikelihoodsr   rq   s                   @r   Ú
on_llm_endz ArthurCallbackHandler.on_llm_end£   s¼  ø€ ð	ØˆKˆKˆKˆKøÝð 	ð 	ð 	ÝØSñô àðøøøøð	øøøð
 ˜Ô!ˆð	Øœ<¨Ô/ˆLˆLøÝð 	ð 	ð 	Ýð9ñô ð ð	øøøøð	øøøõ "&¡¤¨,°|Ô*DÑ!DÐð ˆ
Ý'¨Ô(<Ñ=Ô=ð :	-ñ :	-‰NˆAˆ{Ø)ð 9-ñ 9-�
à*­Cµ´
±´Ñ,=Ô,=Ø)­8¬<¸4¼8Ð+DÑ+DÔ+DØ”O \°-Ô%@ÀÔ%CØÔ$ j¤oð	�	ð Ô-Ð9õ
 &¨Ô)CÐCÐCÝ)¨T¬_Ð<Ð<à3=Ô3MÝ)ô4˜	¥-Ñ0ð %/Ô$>¸zÔ$J�Mà%Ð1Ø Ô6ÐBà#0°Ô#@˜ð'ð 'ð 'ð 'å%*­3¨x©=¬=Ñ%9Ô%9ð'ñ 'ô '˜ð AL˜	 $Ô"<Ñ=õ
 ˜xÔ2µDÑ9Ô9ðVå# xÔ':Ð:Ð:à"*Ô"5µkÔ"B�Kå%¨Ð4Ð4Ý)¨T¬_Ð<Ð<à3>½}Ô3M˜	¥-Ñ0å)¨[Ð8Ð8Ý-°´Ð@Ð@à7BÕCTÔ7U˜	Õ"3Ñ4õ ˜tœÐ.Ð.Ø*@�I�hÑ'à×!Ò! )Ñ,Ô,Ð,Ñ,ñs9-ðx 	Ô×)Ò)¨*Ñ5Ô5Ð5Ð5Ð5s'   ƒ ˆ
'’"¢'³A Á
A ÁAÁA Úinputsc                ó   — dS )zOn chain start, do nothing.Nr$   )rG   rb   r—   rf   s       r   Úon_chain_startz$ArthurCallbackHandler.on_chain_startý   ó   € € € r)   Úoutputsc                ó   — dS )zOn chain end, do nothing.Nr$   )rG   r›   rf   s      r   Úon_chain_endz"ArthurCallbackHandler.on_chain_end  rš   r)   ÚerrorÚBaseExceptionc                ó   — dS )z%Do nothing when LLM outputs an error.Nr$   ©rG   rž   rf   s      r   Úon_llm_errorz"ArthurCallbackHandler.on_llm_error  rš   r)   Útokenc                ó   — dS )zOn new token, pass.Nr$   )rG   r£   rf   s      r   Úon_llm_new_tokenz&ArthurCallbackHandler.on_llm_new_token  rš   r)   c                ó   — dS )z+Do nothing when LLM chain outputs an error.Nr$   r¡   s      r   Úon_chain_errorz$ArthurCallbackHandler.on_chain_error  rš   r)   Ú	input_strc                ó   — dS )zDo nothing when tool starts.Nr$   )rG   rb   r¨   rf   s       r   Úon_tool_startz#ArthurCallbackHandler.on_tool_start  rš   r)   Úactionr   c                ó   — dS )z.Do nothing when agent takes a specific action.Nr$   )rG   r«   rf   s      r   Úon_agent_actionz%ArthurCallbackHandler.on_agent_action  rš   r)   ÚoutputÚobservation_prefixÚ
llm_prefixc                ó   — dS )zDo nothing when tool ends.Nr$   )rG   r®   r¯   r°   rf   s        r   Úon_tool_endz!ArthurCallbackHandler.on_tool_end  rš   r)   c                ó   — dS )z&Do nothing when tool outputs an error.Nr$   r¡   s      r   Úon_tool_errorz#ArthurCallbackHandler.on_tool_error"  rš   r)   rƒ   c                ó   — dS ©z
Do nothingNr$   )rG   rƒ   rf   s      r   Úon_textzArthurCallbackHandler.on_text%  rš   r)   Úfinishr   c                ó   — dS r¶   r$   )rG   r¸   rf   s      r   Úon_agent_finishz%ArthurCallbackHandler.on_agent_finish(  rš   r)   )r    r   r   r!   )rI   NN)
rJ   rK   rL   rM   rN   rM   rO   rM   r   r   )rb   rc   rd   re   rf   r   r   r!   )rl   r   rf   r   r   r!   )rb   rc   r—   rc   rf   r   r   r!   )r›   rc   rf   r   r   r!   )rž   rŸ   rf   r   r   r!   )r£   rK   rf   r   r   r!   )rb   rc   r¨   rK   rf   r   r   r!   )r«   r   rf   r   r   r   )NN)
r®   r   r¯   rM   r°   rM   rf   r   r   r!   )rƒ   rK   rf   r   r   r!   )r¸   r   rf   r   r   r!   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r;   Úclassmethodra   rk   r–   r™   r�   r¢   r¥   r§   rª   r­   r²   r´   r·   rº   Ú__classcell__)rH   s   @r   r   r   +   s•  ø€ € € € € ð
ð 
ð*@ð *@ð *@ð *@ð *@ð *@ðX ð %<Ø&*Ø)-ð4!ð 4!ð 4!ð 4!ñ „[ð4!ðl4ð 4ð 4ð 4ðX6ð X6ð X6ð X6ðt*ð *ð *ð *ð
(ð (ð (ð (ð4ð 4ð 4ð 4ð"ð "ð "ð "ð:ð :ð :ð :ð+ð +ð +ð +ð=ð =ð =ð =ð -1Ø$(ð	)ð )ð )ð )ð )ð5ð 5ð 5ð 5ðð ð ð ðð ð ð ð ð ð ð r)   r   )r   r   )#r¾   Ú
__future__r   rY   r   Úcollectionsr   r   r   Útypingr   r   r	   r
   r   r   Únumpyru   Úlangchain_core.agentsr   r   Úlangchain_core.callbacksr   Úlangchain_core.outputsr   r   Úarthurai.core.modelsr   rŠ   r‹   r‰   r…   rŒ   r   r   r$   r)   r   ú<module>rÉ      sm  ðØ "Ð "à "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ Hà Ð Ð Ð Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,àð 1Ø€O€O€OØ0Ð0Ð0Ð0Ð0Ð0à€Ø'Ð Ø€Ø€Ø€ðð ð ð ð~ð ~ð ~ð ~ð ~Ð/ñ ~ô ~ð ~ð ~ð ~r)   