o
    0 ih:                     @   s   d dl Z d dlmZ d dl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 d dlmZ d dlmZ d d	lmZmZ d d
lmZ erPd dlmZmZmZ zd dlZW n eya   edw G dd deZdd Zdd ZdS )    Nwraps)record_token_usage)set_data_normalized)OPSPANDATA)DidNotEnableIntegration)should_send_default_pii)set_span_errored)capture_internal_exceptionsevent_from_exception)TYPE_CHECKING)AnyCallableIterablezHuggingface not installedc                   @   s0   e Zd ZdZde Zd	ddZedd ZdS )
HuggingfaceHubIntegrationhuggingface_hubzauto.ai.Tc                 C   s
   || _ d S N)include_prompts)selfr    r   s/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/sentry_sdk/integrations/huggingface_hub.py__init__   s   
z"HuggingfaceHubIntegration.__init__c                   C   s<   t tjjjjtjtjjj_t tjjjjtj	tjjj_d S r   )
_wrap_huggingface_taskr   Z	inferenceZ_clientZInferenceClientZtext_generationr   ZGEN_AI_GENERATE_TEXTZchat_completionZGEN_AI_CHATr   r   r   r   
setup_once#   s   


z$HuggingfaceHubIntegration.setup_onceN)T)__name__
__module____qualname__
identifieroriginr   staticmethodr   r   r   r   r   r      s    

r   c                 C   s6   t   t| t jdddd\}}tj||d d S )Nr   F)typeZhandled)Zclient_optionsZ	mechanism)hint)r   r   
sentry_sdk
get_clientoptionsZcapture_event)exceventr#   r   r   r   _capture_exception6   s   
r)   c                    s   t   fdd}|S )Nc               
      s  t  t  d u r| i |S d }d|v r|d }n!d|v r&|d }nt| dkr>t| d ts:t| d tr>| d }|d u rI| i |S | d }|jpV|	dpVd}
dd	 }t j| d
| tjd  tj| |rtj| t r jrttj|dd tjtjtjtjtjtjtjtjd}| D ]&\}}|	|d }	|	d urt|	tt t!tfrĈ||	 qt||	dd qz	| i |W n t"y }
 zt#|
 $d d d  |
d d }
~
ww d }d }g }d}d }d }t% Z ttrd ur|& t'dr$j(d ur$|&j( t'dr3jd ur3j}t'drDt'j)drDj)j*}t'dr\t'j)dr\j)j+d ur\j)j+}t'drkj,d urkj,}t'drj-d urj-D ]8}t'|dr|j*}t'|drt'|j.dr|j.j/}t'|drt'|j.dr|j.j0d ur|&|j.j0 qz|d urtj1| |d urttj2| t r jr|d urt|dkrttj3|dd t|dkrd4|}|rttj5| |d urt6|j7|j8|j9d n|dkrt6|d t:;s0$d d d  W  d    S |	ddrI fdd}| W  d    S  fdd}| W  d    S 1 s_w   Y  d S )Npromptmessages      r   model . )opnamer    Funpack)ZtoolsZfrequency_penaltyZ
max_tokensZpresence_penaltyZtemperatureZtop_pZtop_kstreamgenerated_textdetailsfinish_reasongenerated_tokensusagechoicesmessage
tool_callscontentZinput_tokensZoutput_tokenstotal_tokensrB   c                  3   s,   d } g }d}t  { D ]A}t|dr't|jdr'|jjd ur'||jj t|dr6t|jdr6|jj} t|drKt|jdrK|jjd urK|jj}|V  q| d urZtt	j
|  t rt jrtt|dkrtd|}|rttt	j| |dkr~t|d W d    n1 sw   Y  d d d  d S )	Nr   tokentextr9   r:   r;   r/   rC   )r   hasattrrD   rE   appendr9   r:   r;   r   r   GEN_AI_RESPONSE_FINISH_REASONSr
   r   lenjoinGEN_AI_RESPONSE_TEXTr   __exit__)r:   response_text_buffertokens_usedchunktext_responseZintegrationresspanr   r   new_details_iterator   s\   


.zR_wrap_huggingface_task.<locals>.new_huggingface_task.<locals>.new_details_iteratorc                  3   s   d } d }g }d }d }t   D ]w}t|dr |jd ur |j}t|dr-|jd ur-|j}t|tr;|d ur;|| t|dr|jd ur|jD ]<}t|drbt|jdrb|jj	d urb||jj	 t|dro|j
d uro|j
} t|drt|jdr|jjd ur|jj}qH|V  q|d urtj| | d urttj|  t r̈ jr|d urt|dkrttj|d	d
 t|dkrd|}|rttj| |d urt|j|j|jd d d d  W d    d S 1 sw   Y  d S )Nr.   r<   r=   deltar@   r:   r?   r   Fr5   r/   rA   )r   rF   r.   r<   
isinstancestrrG   r=   rU   r@   r:   r?   set_datar   GEN_AI_RESPONSE_MODELr   rH   r
   r   rI   GEN_AI_RESPONSE_TOOL_CALLSrJ   rK   r   prompt_tokenscompletion_tokensrB   rL   )r:   response_modelrM   r?   r<   rO   choicerP   rQ   r   r   new_iterator"  s   






"zJ_wrap_huggingface_task.<locals>.new_huggingface_task.<locals>.new_iterator)<r$   r%   Zget_integrationr   rI   rV   rW   listr.   getsplitZ
start_spanr    	__enter__rX   r   ZGEN_AI_OPERATION_NAMEZGEN_AI_REQUEST_MODELr
   r   r   ZGEN_AI_REQUEST_MESSAGESZGEN_AI_REQUEST_AVAILABLE_TOOLSZ GEN_AI_REQUEST_FREQUENCY_PENALTYZGEN_AI_REQUEST_MAX_TOKENSZGEN_AI_REQUEST_PRESENCE_PENALTYZGEN_AI_REQUEST_TEMPERATUREZGEN_AI_REQUEST_TOP_PZGEN_AI_REQUEST_TOP_KZGEN_AI_RESPONSE_STREAMINGitemsintfloatbool	Exceptionr)   rL   r   rG   rF   r8   r9   r:   r;   r<   r=   r>   r?   r@   rY   rH   rZ   rJ   rK   r   r[   r\   rB   inspectisgenerator)argskwargsr*   clientr.   Zoperation_nameZattribute_mapping	attributeZspan_attributevalueer:   r]   rM   rN   r?   r<   r^   rP   rT   r_   fr3   rQ   r   new_huggingface_taskD   s  












U6  V &z4_wrap_huggingface_task.<locals>.new_huggingface_taskr   )rr   r3   rs   r   rq   r   r   B   s
     7r   ) ri   	functoolsr   r$   Zsentry_sdk.ai.monitoringr   Zsentry_sdk.ai.utilsr   Zsentry_sdk.constsr   r   Zsentry_sdk.integrationsr   r	   Zsentry_sdk.scoper
   Zsentry_sdk.tracing_utilsr   Zsentry_sdk.utilsr   r   typingr   r   r   r   Z!huggingface_hub.inference._clientr   ImportErrorr   r)   r   r   r   r   r   <module>   s*    