a
    bg,                     @   sN  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 edgd edgd e!dgd e"dgd edgd edgd ed egd ed egd ed egd e degd iZ$ed d!d"Z%G d#d$ d$e	Z&dS )%    N)AnyDictListOptional)UUID)BaseCallbackHandler)	LLMResultguard_import)import_pandasZtoken_usageZtotal_tokensZprompt_tokensZcompletion_tokensrun_id
model_nameZgoodbadZneutralsuccessZfailurei   i promptresponsecontextdurationZfeedback
llm_statusfiddler
   z$123e4567-e89b-12d3-a456-426614174000      returnc                   C   s   t dddS )zLImport the fiddler python package and raise an error if it is not installed.r   zfiddler-client)Zpip_namer	    r   r   |/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/callbacks/fiddler_callback.pyimport_fiddler8   s    r   c                
       s   e Zd Zeeeeedd fddZeedddZdee	e e
eee eeeef  dd	d
dZeeef e	e eedddZeeddddZeeddddZ  ZS )FiddlerCallbackHandlerN)urlorgprojectmodelapi_keyr   c           
         s  t    t | _t | _|| _|| _|| _|| _	|| _
| jt| _i | _i | _i | _| jj|||d| _| j| j vrtd| j d z| j| j W n: ty } z"td| j d |W Y d}~n
d}~0 0 | jjj| jdd}tt|jD ]h}|j| jtkr4| jjj|j| _ t!|j| _"q|j| jt#kr| jjj|j| _ t$t%g|j| _"q| j	| j&| jvr| j	| j'| jvrtd	| j	 d
| j d z"| jj(| j| j	d| ji|d W nB ty } z(td| j	 d| d |W Y d}~n
d}~0 0 | jj)j*|d| jj+j,t-t.t/gtt0t1t2t3t4t5g| j6d}	td| j	 d
| j d z| jj7| j| j	| j	|	d W nB ty } z(td| j	 d| d |W Y d}~n
d}~0 0 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
        )Zorg_idZ
auth_tokenzadding project z.This only has to be done once.zError adding project z(:{e}. Fiddler integration will not work.Nr   )Zmax_inferred_cardinalityzadding dataset z to project train)
project_id
dataset_idZdatasetinfozError adding dataset z: z#.Fiddler integration will not work.)dataset_infor&   Z
model_taskfeaturestargetZmetadata_colscustom_featureszadding model )r%   r&   Zmodel_id
model_infozError adding model )8super__init__r   fdlr   pdr   r    r!   r"   r#   	DataFrame_dataset_dictZ_dfrun_id_promptsZrun_id_responserun_id_starttimeZ
FiddlerApifiddler_clientZget_project_namesprintZadd_project	ExceptionZDatasetInfoZfrom_dataframerangelencolumnsnameFEEDBACKZDataTypeCATEGORYZ	data_typeFEEDBACK_POSSIBLE_VALUESZpossible_values
LLM_STATUSSUCCESSFAILUREZget_model_namesZget_dataset_namesZupload_datasetZ	ModelInfoZfrom_dataset_infoZ	ModelTaskZLLMPROMPTCONTEXTRESPONSERUN_IDTOTAL_TOKENSPROMPT_TOKENSCOMPLETION_TOKENS
MODEL_NAMEDURATIONr+   Z	add_model)
selfr   r    r!   r"   r#   er(   ir,   	__class__r   r   r.   ?   s    


zFiddlerCallbackHandler.__init__r   c                 C   s   | j jddtgd| j jdtdd| j jddtgd| j jdtdd| j jdd	ttgd
g did| j jddttgd| j jddttgd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 EmbeddingZ	embedding)r;   
enrichmentr:   z	Prompt CF)r;   Zsource_columncolumnzResponse EmbeddingzResponse CFzText StatisticsZtextstat
statistics)Zautomated_readability_indexZcoleman_liau_indexZdale_chall_readability_scoreZdifficult_wordsZflesch_reading_easeZflesch_kincaid_gradeZgunning_fogZlinsear_write_formula)r;   rP   r:   configZPIIZpiiZ	SentimentZ	sentiment)r/   Z
EnrichmentrB   ZTextEmbeddingrD   )rK   r   r   r   r+      sL    z&FiddlerCallbackHandler.custom_features )r   prompt_responsesr   r   r   token_usage_dictr   c                 C   s  t | j| }| jt| j| t|tt|g| t|g| t	|g| t
|g| i}|r| D ]$\}	}
t|
tr||
g| n|
||	< q`zN|jd dkr| j| j| j| n&|jdd}| jj| j| j|d d W n6 ty
 } ztd| d W Y d}~n
d}~0 0 dS )	z+
        Publish events to fiddler
        r   r   records)Zorient)eventz$Error publishing events to fiddler: z. continuing...N)r9   r3   r0   r1   rB   rD   rE   strrJ   r?   rI   items
isinstanceintshaper5   Zpublish_events_batchr!   r"   to_dictZpublish_eventr7   r6   )rK   r   rU   r   r   r   rV   Zprompt_countZdfkeyvalueZdf_dictrL   r   r   r   _publish_events   s0    





z&FiddlerCallbackHandler._publish_events)
serializedpromptskwargsr   c                 K   s,   |t  }|| j|< tt d | j|< d S )N  )rE   r3   r\   timer4   )rK   rb   rc   rd   r   r   r   r   on_llm_start&  s    
z#FiddlerCallbackHandler.on_llm_start)r   rd   r   c           	      K   s   |  }|t }tt d | j|  }d}i }t|jtr`dd |j D }|j	t
d}dd |D }| |||t|| d S )Nre   rT   c                 S   s$   i | ]\}}|t ttfv r||qS r   )rF   rG   rH   ).0kvr   r   r   
<dictcomp>5  s   z5FiddlerCallbackHandler.on_llm_end.<locals>.<dictcomp>c                 S   s   g | ]}|j d  d  jqS )r   )Zgenerationstext)rh   Z	llmresultr   r   r   
<listcomp><  s   z5FiddlerCallbackHandler.on_llm_end.<locals>.<listcomp>)flattenrE   r\   rf   r4   r[   Z
llm_outputdictrZ   getrI   ra   r@   )	rK   r   rd   Zflattened_llmresultr   Zrun_durationr   rV   rU   r   r   r   
on_llm_end-  s*    z!FiddlerCallbackHandler.on_llm_end)errorrd   r   c                 K   sF   |t  }tt d | j|  }| |dgt| j|  |t d S )Nre   rT   )rE   r\   rf   r4   ra   r9   r3   rA   )rK   rr   rd   r   r   r   r   r   on_llm_errorI  s
    z#FiddlerCallbackHandler.on_llm_error)rT   N)__name__
__module____qualname__rY   r.   propertylistr+   r   r   r\   r   r   r   ra   rg   r   rq   BaseExceptionrs   __classcell__r   r   rN   r   r   >   s2   wK  +r   )'rf   typingr   r   r   r   uuidr   Zlangchain_core.callbacksr   Zlangchain_core.outputsr   Zlangchain_core.utilsr
   Z#langchain_community.callbacks.utilsr   ZTOKEN_USAGErF   rG   rH   rE   rI   ZGOODBADZNEUTRALr@   rA   ZDEFAULT_MAX_TOKENZDEFAULT_MAX_DURATIONrB   rD   rC   rJ   r<   r?   r>   r2   r   r   r   r   r   r   <module>   sP   







