
    dh,                     j   S SK r S SKJrJrJrJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJr  SrS	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!Sr"\\\/r#\S/S-  \S/S-  \S/S-  \!S/S-  \"S/S-  \S/S-  \S/S-  \S \/S-  \S \/S-  \S \/S-  \ S\/S-  0r$S \4S! jr% " S" S#\	5      r&g)$    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                      [        SSS9$ )zLImport the fiddler python package and raise an error if it is not installed.r   zfiddler-client)pip_namer
        f/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/callbacks/fiddler_callback.pyimport_fiddlerr(   8   s    	,<==r&   c                      ^  \ rS rSrS\S\S\S\S\SS4U 4S	 jjr\S\4S
 j5       r  SS\	S\
\   S\S\S\\   S\\\\4      SS4S jjrS\\\4   S\
\   S\S\4S jrS\S\SS4S jrS\S\SS4S jrSrU =r$ )FiddlerCallbackHandler>   urlorgprojectmodelapi_keyr"   Nc                   > [         T
U ]  5         [        5       U l        [	        5       U l        Xl        X l        X0l        X@l	        XPl
        U R
                  R                  [        5      U l        0 U l        0 U l        0 U l        U R                  R#                  XUS9U l        U R                  U R$                  R'                  5       ;  a?  [)        SU R                   S35         U R$                  R+                  U R                  5        U R                  R.                  R1                  U R                  SS9n[3        [5        UR6                  5      5       H  nUR6                  U   R8                  [:        :X  aL  U R                  R<                  R>                  UR6                  U   l         [B        UR6                  U   l"        Mp  UR6                  U   R8                  [F        :X  d  M  U R                  R<                  R>                  UR6                  U   l         [H        [J        /UR6                  U   l"        M     U R                  U R$                  RM                  U R                  5      ;  Gaz  U R                  U R$                  RO                  U R                  5      ;  ac  [)        S	U R                   S
U R                   S35         U R$                  RQ                  U R                  U R                  SU R                  0US9  U R                  RR                  RU                  USU R                  RV                  RX                  [Z        [\        [^        /[:        [`        [b        [d        [f        [h        [j        /U Rl                  S9n	[)        SU R                   S
U R                   S35         U R$                  Ro                  U R                  U R                  U R                  U	S9  gg! [,         a   n[)        SU R                   S35        UeSnAff = f! [,         a#  n[)        SU R                   SU S35        UeSnAff = f! [,         a#  n[)        SU R                   SU S35        UeSnAff = f)aO  
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_infor7   
model_taskfeaturestargetmetadata_colscustom_featureszadding model )r6   r7   model_id
model_infozError adding model )8super__init__r(   fdlr   pdr,   r-   r.   r/   r0   	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/   r0   er:   irA   	__class__s             r'   rC   FiddlerCallbackHandler.__init__?   s   & 	!#/
77$$]3576813 #hh11#g1V<<t22DDFF!$,,/NO##//= xx++::HHq ; 

 s<//01A##A&++x748HH4E4E4N4N$$Q'1:R$$Q'7%%a(--;48HH4E4E4N4N$$Q'1;BG:L$$Q'7 2 ::T00@@NNzz!4!4!F!Ft||!TT%djj\dll^ L5 5''66#'<<#'::!($(( 3)	 7  ++==)"88--11 '84 !% !% 4 4 > J  

|<~ F1 1##--#||#zz!ZZ)	 . S O+  +DLL> :> > D ! /

|2aS A= = GD  )$**Rs ;9 9 sH   &%O- <P 1:Q
 -
P7PP
Q$QQ

Q7Q22Q7c                    U R                   R                  SS[        /S9U R                   R                  S[        SS9U R                   R                  SS[        /S9U R                   R                  S[        SS9U R                   R                  SS	[        [        /S
/ SQ0S9U R                   R                  SS[        [        /S9U R                   R                  SS[        [        /S9/$ )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)rW   
enrichmentrV   z	Prompt CF)rW   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)rW   ry   rV   configPIIpii	Sentiment	sentiment)rD   
Enrichmentrh   TextEmbeddingrj   )rr   s    r'   r?   &FiddlerCallbackHandler.custom_features   s   * HH'&   
 HH"" $) # 
 HH)&!
   
 HH"""&+ # 
 HH&%*  	#	   " HH *   
 HH &*   W0
 0	
r&   r   prompt_responsesr   r   r   token_usage_dictc                    [        U R                  U   5      nU R                  R                  [        U R                  U   [
        U[        [        U5      /U-  [        U/U-  [        U/U-  [        U/U-  05      nU(       a8  UR                  5        H$  u  p[        U
[        5      (       a  U
/U-  OU
X'   M&      UR                  S   S:  a2  U R                  R!                  U R"                  U R$                  U5        gUR'                  SS9nU R                  R)                  U R"                  U R$                  US   S9  g! [*         a  n[-        SU S35         SnAgSnAff = f)	z
Publish events to fiddler
r   r!   records)orient)eventz$Error publishing events to fiddler: z. continuing...N)rU   rI   rE   rF   rh   rj   rk   strrp   r^   ro   items
isinstanceintshaperM   publish_events_batchr.   r/   to_dictpublish_eventrQ   rO   )rr   r   r   r   r   r   r   prompt_countdfkeyvaluedf_dictrs   s                r'   _publish_events&FiddlerCallbackHandler._publish_events   sO    4..v67WW++F3*V48*|3ZL<7ZL<7	
 .446
4>uc4J4J5'L0PU 7	xx{Q##88tzzSUV**I*6##11LL$**GAJ 2   	6qcI 	s    >AE AE 
E(E##E(
serializedpromptskwargsc                     U[            nX R                  U'   [        [        R                  " 5       S-  5      U R                  U'   g )N  )rk   rI   r   timerK   )rr   r   r   r   r   s        r'   on_llm_start#FiddlerCallbackHandler.on_llm_start&  s;     &-F#(+DIIK$,>(?f%r&   r   c                 D   UR                  5       nU[           n[        [        R                  " 5       S-  5      U R                  U   -
  nSn0 n[        UR                  [        5      (       ad  UR                  R                  5        VV	s0 sH  u  pU[        [        [        4;   d  M  X_M      nnn	UR                  R                  [        S5      nU V
s/ sH  oR                  S   S   R                  PM      nn
U R!                  UUU["        UU5        g s  sn	nf s  sn
f )Nr    r   )flattenrk   r   r   rK   r   
llm_outputdictr   rl   rm   rn   getro   generationstextr   r_   )rr   r   r   flattened_llmresultr   run_durationr   r   kv	llmresultr   s               r'   
on_llm_end!FiddlerCallbackHandler.on_llm_end-  s   &..0499;-.1F1Fv1NN
h))400 %//557 7DA}6GHH 7   
 ",,00R@J ?R
>Q!!!$Q',,>Q 	 
 		
 
s   D)D$Derrorc                     U[            n[        [        R                  " 5       S-  5      U R                  U   -
  nU R	                  US/[        U R                  U   5      -  U[        5        g )Nr   r   )rk   r   r   rK   r   rU   rI   r`   )rr   r   r   r   r   s        r'   on_llm_error#FiddlerCallbackHandler.on_llm_errorI  s^    tyy{T)*T-B-B6-JJRD3t226:;;Xw	
r&   )rH   r0   rD   rM   r/   r-   rE   r.   rI   rJ   rK   r,   )r   N)__name__
__module____qualname____firstlineno__r   rC   propertylistr?   r   r   r   r   r   r   r   r   r	   r   BaseExceptionr   __static_attributes____classcell__)ru   s   @r'   r*   r*   >   s?   uu u 	u
 u u 
un C
 C
 C
V %'59(( s)( 	(
 ( SM( #4S>2( 
(T@sCx.@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_USAGErl   rm   rn   rk   ro   GOODBADNEUTRALr_   r`   DEFAULT_MAX_TOKENDEFAULT_MAX_DURATIONrh   rj   ri   rp   rX   r^   r\   rG   r(   r*   r%   r&   r'   <module>r      sK    , ,  8 , - =
 ' 	



    


 #w/  YK"ykBi[2vhmb b 
34r91'(1,A()A-,-1q&'!+> >Q
0 Q
r&   