o
    hh:                     @   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   i/var/www/html/pro-man-master/venv/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   	inference_clientInferenceClienttext_generationr   GEN_AI_GENERATE_TEXTchat_completion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)typehandled)client_options	mechanism)hint)r   r   
sentry_sdk
get_clientoptionscapture_event)exceventr-   r   r   r   _capture_exception6   s   
r4   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)toolsfrequency_penalty
max_tokenspresence_penaltytemperaturetop_ptop_kstreamgenerated_textdetailsfinish_reasongenerated_tokensusagechoicesmessage
tool_callscontentinput_tokensoutput_tokenstotal_tokensrV   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textrK   rL   rM   r:   rW   )r   hasattrrX   rY   appendrK   rL   rM   r   r   GEN_AI_RESPONSE_FINISH_REASONSr
   r   lenjoinGEN_AI_RESPONSE_TEXTr   __exit__)rL   response_text_buffertokens_usedchunktext_response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 )Nr9   rN   rO   deltarR   rL   rQ   r   Fr@   r:   rS   )r   rZ   r9   rN   
isinstancestrr[   rO   rj   rR   rL   rQ   set_datar   GEN_AI_RESPONSE_MODELr   r\   r
   r   r]   GEN_AI_RESPONSE_TOOL_CALLSr^   r_   r   prompt_tokenscompletion_tokensrV   r`   )rL   response_modelra   rQ   rN   rc   choicerd   re   r   r   new_iterator"  s   






"zJ_wrap_huggingface_task.<locals>.new_huggingface_task.<locals>.new_iterator)<r.   r/   get_integrationr   r]   rk   rl   listr9   getsplit
start_spanr'   	__enter__rm   r   GEN_AI_OPERATION_NAMEGEN_AI_REQUEST_MODELr
   r   r   GEN_AI_REQUEST_MESSAGESGEN_AI_REQUEST_AVAILABLE_TOOLS GEN_AI_REQUEST_FREQUENCY_PENALTYGEN_AI_REQUEST_MAX_TOKENSGEN_AI_REQUEST_PRESENCE_PENALTYGEN_AI_REQUEST_TEMPERATUREGEN_AI_REQUEST_TOP_PGEN_AI_REQUEST_TOP_KGEN_AI_RESPONSE_STREAMINGitemsintfloatbool	Exceptionr4   r`   r   r[   rZ   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rn   r\   ro   r^   r_   r   rp   rq   rV   inspectisgenerator)argskwargsr5   clientr9   operation_nameattribute_mapping	attributespan_attributevalueerL   rr   ra   rb   rQ   rN   rs   rd   ri   rt   fr>   re   r   new_huggingface_taskD   s  












U6  V &z4_wrap_huggingface_task.<locals>.new_huggingface_taskr   )r   r>   r   r   r   r   r   B   s
     7r   ) r   	functoolsr   r.   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   sentry_sdk.constsr   r   sentry_sdk.integrationsr   r	   sentry_sdk.scoper
   sentry_sdk.tracing_utilsr   sentry_sdk.utilsr   r   typingr   r   r   r   !huggingface_hub.inference._clientr   ImportErrorr   r4   r   r   r   r   r   <module>   s*    