§
    šŠtj£,  ã                   óp  — d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ dZd	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"eeegZ#edgdz  edgdz  edgdz  e!dgdz  e"dgdz  edgdz  edgdz  ed egdz  ed egdz  ed egdz  e degdz  iZ$d efd!„Z% G d"„ d#e	¦  «        Z&dS )$é    N)ÚAnyÚDictÚListÚOptional)ÚUUID)ÚBaseCallbackHandler)Ú	LLMResult©Úguard_import)Úimport_pandasÚtoken_usageÚtotal_tokensÚprompt_tokensÚcompletion_tokensÚrun_idÚ
model_nameÚgoodÚbadÚneutralÚsuccessÚfailurei   iÀÔ ÚpromptÚresponseÚcontextÚdurationÚfeedbackÚ
llm_statusÚfiddleré
   z$123e4567-e89b-12d3-a456-426614174000é   é   Úreturnc                  ó$   — t          dd¬¦  «        S )zLImport the fiddler python package and raise an error if it is not installed.r   zfiddler-client)Úpip_namer
   © ó    úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/callbacks/fiddler_callback.pyÚimport_fiddlerr(   8   s   € å˜	Ð,<Ð=Ñ=Ô=Ð=r&   c                   ó  ‡ — e Zd Zdedededededdfˆ fd„Zedefd	„¦   «         Z	 	 ddede	e         de
dedee         deeeef                  ddfd„Zdeeef         de	e         dedefd„Zdededdfd„Zdededdfd„Zˆ xZS )ÚFiddlerCallbackHandlerÚurlÚorgÚprojectÚmodelÚapi_keyr"   Nc                 ó  •— t          ¦   «                              ¦   «          t          ¦   «         | _        t	          ¦   «         | _        || _        || _        || _        || _	        || _
        | j                             t          ¦  «        | _        i | _        i | _        i | _        | j                             |||¬¦  «        | _        | j        | j                             ¦   «         vret)          d| j        › d�¦  «         	 | j                             | j        ¦  «         n,# t,          $ r}t)          d| j        › d�¦  «         |‚d}~ww xY w| j        j                             | j        d¬¦  «        }t3          t5          |j        ¦  «        ¦  «        D ]°}|j        |         j        t:          k    r9| j        j        j        |j        |         _         tB          |j        |         _"        ŒV|j        |         j        tF          k    r?| j        j        j        |j        |         _         tH          tJ          g|j        |         _"        Œ±| j	        | j         &                    | j        ¦  «        v�rš| j	        | j         '                    | j        ¦  «        vr€t)          d	| j	        › d
| j        › d�¦  «         	 | j         (                    | j        | j	        d| j        i|¬¦  «         n/# t,          $ r"}t)          d| j	        › d|› d�¦  «         |‚d}~ww xY w| j        j)         *                    |d| j        j+        j,        tZ          t\          t^          gt:          t`          tb          td          tf          th          tj          g| j6        ¬¦  «        }	t)          d| j	        › d
| j        › d�¦  «         	 | j         7                    | j        | j	        | j	        |	¬¦  «         dS # t,          $ r"}t)          d| j	        › d|› d�¦  «         |‚d}~ww xY wdS )a—  
        Initialize Fiddler callback handler.

        Args:
            url: Fiddler URL (e.g. https://demo.fiddler.ai).
                Make sure to include the protocol (http/https).
            org: Fiddler organization id
            project: Fiddler project name to publish events to
            model: Fiddler model name to publish events to
            api_key: Fiddler authentication token
        )Úorg_idÚ
auth_tokenzadding project z.This only has to be done once.zError adding project z(:{e}. Fiddler integration will not work.Nr   )Úmax_inferred_cardinalityzadding dataset z to project Útrain)Ú
project_idÚ
dataset_idÚdatasetÚinfozError adding dataset z: z#.Fiddler integration will not work.)Údataset_infor6   Ú
model_taskÚfeaturesÚtargetÚmetadata_colsÚcustom_featureszadding model )r5   r6   Úmodel_idÚ
model_infozError adding model )8ÚsuperÚ__init__r(   Úfdlr   Úpdr+   r,   r-   r.   r/   Ú	DataFrameÚ_dataset_dictÚ_dfÚrun_id_promptsÚrun_id_responseÚrun_id_starttimeÚ
FiddlerApiÚfiddler_clientÚget_project_namesÚprintÚadd_projectÚ	ExceptionÚDatasetInfoÚfrom_dataframeÚrangeÚlenÚcolumnsÚnameÚFEEDBACKÚDataTypeÚCATEGORYÚ	data_typeÚFEEDBACK_POSSIBLE_VALUESÚpossible_valuesÚ
LLM_STATUSÚSUCCESSÚFAILUREÚget_model_namesÚget_dataset_namesÚupload_datasetÚ	ModelInfoÚfrom_dataset_infoÚ	ModelTaskÚLLMÚPROMPTÚCONTEXTÚRESPONSEÚRUN_IDÚTOTAL_TOKENSÚPROMPT_TOKENSÚCOMPLETION_TOKENSÚ
MODEL_NAMEÚDURATIONr>   Ú	add_model)Úselfr+   r,   r-   r.   r/   Úer9   Úir@   Ú	__class__s             €r'   rB   zFiddlerCallbackHandler.__init__?   s€  ø€ õ& 	‰Œ×ÒÑÔÐå!Ñ#Ô#ˆŒÝ‘/”/ˆŒàˆŒØˆŒØˆŒØˆŒ
ØˆŒØ”7×$Ò$¥]Ñ3Ô3ˆŒà57ˆÔØ68ˆÔØ13ˆÔð #œh×1Ò1°#¸cÈgÐ1ÑVÔVˆÔàŒ<˜tÔ2×DÒDÑFÔFÐFÐFÝØO $¤,ÐOÐOÐOñô ð ðØÔ#×/Ò/°´Ñ=Ô=Ð=Ð=øÝð ð ð Ýð>¨D¬Lð >ð >ð >ñô ð ð �øøøøðøøøð ”xÔ+×:Ò:ØŒH¨qð ;ñ 
ô 
ˆõ
 •s˜<Ô/Ñ0Ô0Ñ1Ô1ð 	Mð 	MˆAØÔ# AÔ&Ô+­xÒ7Ð7Ø48´HÔ4EÔ4N�Ô$ QÔ'Ô1Ý:R�Ô$ QÔ'Ô7Ð7àÔ% aÔ(Ô-µÒ;Ð;Ø48´HÔ4EÔ4N�Ô$ QÔ'Ô1Ý;BÅGÐ:L�Ô$ QÔ'Ô7øàŒ:˜TÔ0×@Ò@ÀÄÑNÔNÐNÑNØŒz Ô!4×!FÒ!FÀtÄ|Ñ!TÔ!TÐTÐTÝð5 d¤jð 5ð 5¸d¼lð 5ð 5ð 5ñô ð ðØÔ'×6Ò6Ø#'¤<Ø#'¤:Ø!(¨$¬(Ð 3Ø)ð	 7ñ ô ð ð øõ !ð ð ð Ýð=°´
ð =ð =¸að =ð =ð =ñô ð ð �Gøøøøðøøøð œÔ+×=Ò=Ø)Ø"Øœ8Ô-Ô1Ý ¥'­8Ð4ÝåÝ Ý!Ý%ÝÝðð !%Ô 4ð >ñ ô ˆJõ  ð1 ¤
ð 1ð 1¸¼ð 1ð 1ð 1ñô ð ðØÔ#×-Ò-Ø#œ|Ø#œzØ!œZØ)ð	 .ñ ô ð ð ð øõ ð ð ð Ýð9¨$¬*ð 9ð 9¸ð 9ð 9ð 9ñô ð ð �øøøøðøøøð_ OÐNsH   Ã?D Ä
EÄ)EÅEÊ1/K! Ë!
LË+LÌLÎ&-O Ï
PÏO<Ï<Pc                 ó  — | j                              ddt          g¬¦  «        | j                              dt          d¬¦  «        | j                              ddt          g¬¦  «        | j                              dt          d¬¦  «        | j                              dd	t          t          gd
g d¢i¬¦  «        | j                              ddt          t          g¬¦  «        | j                              ddt          t          g¬¦  «        gS )a[  
        Define custom features for the model to automatically enrich the data with.
        Here, we enable the following enrichments:
        - Automatic Embedding generation for prompt and response
        - Text Statistics such as:
            - Automated Readability Index
            - Coleman Liau Index
            - Dale Chall Readability Score
            - Difficult Words
            - Flesch Reading Ease
            - Flesch Kincaid Grade
            - Gunning Fog
            - Linsear Write Formula
        - PII - Personal Identifiable Information
        - Sentiment Analysis

        zPrompt EmbeddingÚ	embedding)rV   Ú
enrichmentrU   z	Prompt CF)rV   Úsource_columnÚcolumnzResponse EmbeddingzResponse CFzText StatisticsÚtextstatÚ
statistics)Úautomated_readability_indexÚcoleman_liau_indexÚdale_chall_readability_scoreÚdifficult_wordsÚflesch_reading_easeÚflesch_kincaid_gradeÚgunning_fogÚlinsear_write_formula)rV   rw   rU   ÚconfigÚPIIÚpiiÚ	SentimentÚ	sentiment)rC   Ú
Enrichmentrg   ÚTextEmbeddingri   )rq   s    r'   r>   z&FiddlerCallbackHandler.custom_features¶   s:  € ð* ŒH×ÒØ'Ø&Ý˜ð  ñ ô ð
 ŒH×"Ò"Ø Ý$Ø)ð #ñ ô ð
 ŒH×ÒØ)Ø&Ý!˜
ð  ñ ô ð
 ŒH×"Ò"Ø"Ý&Ø+ð #ñ ô ð
 ŒH×ÒØ&Ø%Ý¥Ð*à ð 	#ð 	#ð 	#ðð	  ñ ô ð" ŒH×ÒØØ Ý¥Ð*ð  ñ ô ð
 ŒH×ÒØ Ø&Ý¥Ð*ð  ñ ô ðW0
ð 0	
r&   Ú r   Úprompt_responsesr   r   r   Útoken_usage_dictc                 óÚ  — t          | j        |         ¦  «        }| j                             t          | j        |         t
          |t          t          |¦  «        g|z  t          |g|z  t          |g|z  t          |g|z  i¦  «        }|r:|                     ¦   «         D ]%\  }	}
t          |
t          ¦  «        r|
g|z  n|
||	<   Œ&	 |j        d         dk    r(| j                             | j        | j        |¦  «         dS |                     d¬¦  «        }| j                             | j        | j        |d         ¬¦  «         dS # t*          $ r}t-          d|› d�¦  «         Y d}~dS d}~ww xY w)	z+
        Publish events to fiddler
        r   r!   Úrecords)Úorient)Úeventz$Error publishing events to fiddler: z. continuing...N)rT   rH   rD   rE   rg   ri   rj   Ústrro   r]   rn   ÚitemsÚ
isinstanceÚintÚshaperL   Úpublish_events_batchr-   r.   Úto_dictÚpublish_eventrP   rN   )rq   r   rŒ   r   r   r   r�   Úprompt_countÚdfÚkeyÚvalueÚdf_dictrr   s                r'   Ú_publish_eventsz&FiddlerCallbackHandler._publish_eventsü   s¶  € õ ˜4Ô.¨vÔ6Ñ7Ô7ˆØŒW×Òå˜Ô+¨FÔ3ÝÐ*Ý�˜V™œ˜¨Ñ4Ý˜8˜* |Ñ3Ý˜Z˜L¨<Ñ7Ý˜Z˜L¨<Ñ7ðñ	
ô 	
ˆð ð 	VØ.×4Ò4Ñ6Ô6ð Vð V‘
��UÝ4>¸uÅcÑ4JÔ4JÐU˜5˜' LÑ0Ð0ÐPU��3‘�ð	ØŒx˜Œ{˜QŠˆØÔ#×8Ò8¸¼ÀtÄzÐSUÑVÔVÐVÐVÐVàŸ*š*¨I˜*Ñ6Ô6�ØÔ#×1Ò1Ø”L $¤*°G¸A´Jð 2ñ ô ð ð ð øõ ð 	ð 	ð 	ÝØI°qÐIÐIÐIñô ð ð ð ð ð ð ð øøøøð	øøøs   Ã7E Ã=AE Å
E*ÅE%Å%E*Ú
serializedÚpromptsÚkwargsc                 óŠ   — |t                    }|| j        |<   t          t          j        ¦   «         dz  ¦  «        | j        |<   d S )Néè  )rj   rH   r•   ÚtimerJ   )rq   r    r¡   r¢   r   s        r'   Úon_llm_startz#FiddlerCallbackHandler.on_llm_start&  s@   € ð �”ˆØ&-ˆÔ˜FÑ#Ý(+­D¬I©K¬K¸$Ñ,>Ñ(?Ô(?ˆÔ˜fÑ%Ð%Ð%r&   r   c                 óÂ  — |                      ¦   «         }|t                   }t          t          j        ¦   «         dz  ¦  «        | j        |         z
  }d}i }t          |j        t          ¦  «        rCd„ |j                             ¦   «         D ¦   «         }|j         	                    t          d¦  «        }d„ |D ¦   «         }|                      |||t          ||¦  «         d S )Nr¤   r‹   c                 óF   — i | ]\  }}|t           t          t          fv ¯||“ŒS r%   )rk   rl   rm   )Ú.0ÚkÚvs      r'   ú
<dictcomp>z5FiddlerCallbackHandler.on_llm_end.<locals>.<dictcomp>5  s;   € ð  ð  ð  á�A�qØ�¥}Õ6GÐHÐHÐHð �1àHÐHÐHr&   c                 ó>   — g | ]}|j         d          d          j        ‘ŒS )r   )ÚgenerationsÚtext)r©   Ú	llmresults     r'   ú
<listcomp>z5FiddlerCallbackHandler.on_llm_end.<locals>.<listcomp><  s5   € ð 
ð 
ð 
Ø1:ˆIÔ! !Ô$ QÔ'Ô,ð
ð 
ð 
r&   )Úflattenrj   r•   r¥   rJ   r”   Ú
llm_outputÚdictr“   Úgetrn   rŸ   r^   )	rq   r   r¢   Úflattened_llmresultr   Úrun_durationr   r�   rŒ   s	            r'   Ú
on_llm_endz!FiddlerCallbackHandler.on_llm_end-  s   € Ø&×.Ò.Ñ0Ô0ÐØ�”ˆÝ�4œ9™;œ;¨Ñ-Ñ.Ô.°Ô1FÀvÔ1NÑNˆØˆ
ØÐå�hÔ)­4Ñ0Ô0ð 	Að ð  à$Ô/×5Ò5Ñ7Ô7ð ñ  ô  Ðð
 "Ô,×0Ò0µ¸RÑ@Ô@ˆJð
ð 
Ø>Qð
ñ 
ô 
Ðð 	×ÒØØØÝØØñ	
ô 	
ð 	
ð 	
ð 	
r&   Úerrorc                 óô   — |t                    }t          t          j        ¦   «         dz  ¦  «        | j        |         z
  }|                      |dgt          | j        |         ¦  «        z  |t          ¦  «         d S )Nr¤   r‹   )rj   r•   r¥   rJ   rŸ   rT   rH   r_   )rq   r¹   r¢   r   r   s        r'   Úon_llm_errorz#FiddlerCallbackHandler.on_llm_errorI  sr   € Ø�”ˆÝ•t”y‘{”{ TÑ)Ñ*Ô*¨TÔ-BÀ6Ô-JÑJˆà×ÒØ�R�D�3˜tÔ2°6Ô:Ñ;Ô;Ñ;¸XÅwñ	
ô 	
ð 	
ð 	
ð 	
r&   )r‹   N)Ú__name__Ú
__module__Ú__qualname__r’   rB   ÚpropertyÚlistr>   r   r   r•   r   r   r   rŸ   r¦   r	   r¸   ÚBaseExceptionr»   Ú__classcell__)rt   s   @r'   r*   r*   >   sÆ  ø€ € € € € ðuàðuð ðuð ð	uð
 ðuð ðuð 
ðuð uð uð uð uð uðn ðC
 ð C
ð C
ð C
ñ „XðC
ðV %'Ø59ð(ð (àð(ð ˜sœ)ð(ð ð	(ð
 ð(ð ˜S”Mð(ð # 4¨¨S¨¤>Ô2ð(ð 
ð(ð (ð (ð (ðT@Ø˜s C˜xœ.ð@Ø37¸´9ð@ØHKð@à	ð@ð @ð @ð @ð
 9ð 
¸ð 
Àð 
ð 
ð 
ð 
ð8
 -ð 
¸3ð 
À4ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r&   r*   )'r¥   Útypingr   r   r   r   Úuuidr   Úlangchain_core.callbacksr   Úlangchain_core.outputsr	   Úlangchain_core.utilsr   Ú#langchain_community.callbacks.utilsr   ÚTOKEN_USAGErk   rl   rm   rj   rn   ÚGOODÚBADÚNEUTRALr^   r_   ÚDEFAULT_MAX_TOKENÚDEFAULT_MAX_DURATIONrg   ri   rh   ro   rW   r]   r[   rF   r(   r*   r%   r&   r'   ú<module>rÏ      sù  ðØ €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð à 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø -Ð -Ð -Ð -Ð -Ð -à =Ð =Ð =Ð =Ð =Ð =ð
 €Ø€Ø€Ø'Ð Ø	€Ø€
Ø€Ø€Ø
€Ø
€Ø
€ð Ð ØÐ ð 
€Ø€Ø
€Ø€Ø€Ø€
à  # wÐ/Ð ð ˆYˆK˜"ÑØˆyˆk˜BÑØˆiˆ[˜2ÑØˆvˆh˜‰mØ��˜bÑ Ø��˜bÑ Ø
Ð3Ð4°rÑ9Ø�1Ð'Ð(¨1Ñ,Ø�AÐ(Ð)¨AÑ-Ø˜Ð,Ð-°Ñ1ØˆqÐ&Ð'¨!Ñ+ð€ð>˜ð >ð >ð >ð >ðQ
ð Q
ð Q
ð Q
ð Q
Ð0ñ Q
ô Q
ð Q
ð Q
ð Q
r&   