o
    ٰiv:                     @   s  d dl Z 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mZ d d
lmZ erVd dlmZmZmZ zd dlZW n eyg   edw G dd deZdddZ ddde!ddf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reraise)TYPE_CHECKING)AnyCallableIterablezHuggingface not installedc                   @   sB   e Zd ZdZde Z	ddd deddfdd	Zedd
dZdS )HuggingfaceHubIntegrationhuggingface_hubzauto.ai.Tselfinclude_promptsreturnNc                 C   s
   || _ d S N)r   )r   r    r   [/home/ubuntu/.local/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_once)T)r   N)	__name__
__module____qualname__
identifieroriginboolr   staticmethodr$   r   r   r   r   r      s    

r   excr   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)r,   eventr1   r   r   r   _capture_exception7   s   
r7   fzCallable[..., Any]opc                    s   t  d fdd}|S )Nargsr   kwargsr   c                     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 n9 t"y }
 z,t#$ }t%  t&|
 'd d d  W d    n1 sw   Y  t(|  W Y d }
~
nd }
~
ww d }d }g }d}d }d }t% \ ttr1d ur1|) t*drCj+d urC|)j+ t*drRjd urRj}t*drct*j,drcj,j-}t*dr{t*j,dr{j,j.d ur{j,j.}t*drj/d urj/}t*dr҈j0d ur҈j0D ]8}t*|dr|j-}t*|drt*|j1dr|j1j2}t*|drt*|j1dr|j1j3d ur|)|j1j3 q|d urވtj4| |d urttj5| t r jr|d urt|dkrttj6|dd t|dkrd7|}|rttj8| |d ur.t9|j:|j;|j<d n|dkr9t9|d t=>sO'd d d  W  d    S |	ddrid! fdd}| W  d    S d" fdd }| W  d    S 1 sw   Y  d S )#Npromptmessages      r   model . )r9   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r\   r   Iterable[Any]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textrQ   rR   rS   rA   r]   )r   hasattrr_   r`   appendrQ   rR   rS   r   r   GEN_AI_RESPONSE_FINISH_REASONSr
   r   lenjoinGEN_AI_RESPONSE_TEXTr   __exit__)rR   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_iteratorIterable[str]c                  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@   rT   rU   deltarX   rR   rW   r   FrF   rA   rY   )r   ra   r@   rT   
isinstancestrrb   rU   rr   rX   rR   rW   set_datar   GEN_AI_RESPONSE_MODELr   rc   r
   r   rd   GEN_AI_RESPONSE_TOOL_CALLSre   rf   r   prompt_tokenscompletion_tokensr\   rg   )rR   response_modelrh   rW   rT   rj   choicerk   rl   r   r   new_iterator!  s   






"zJ_wrap_huggingface_task.<locals>.new_huggingface_task.<locals>.new_iterator)r   r^   )r   rq   )?r2   r3   get_integrationr   rd   rs   rt   listr@   getsplit
start_spanr)   	__enter__ru   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floatr*   	Exceptionsysexc_infor   r7   rg   r   rb   ra   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rv   rc   rw   re   rf   r   rx   ry   r\   inspectisgenerator)r:   r;   r<   clientr@   operation_nameattribute_mapping	attributespan_attributevalueer   rR   rz   rh   ri   rW   rT   r{   rk   rp   r|   r8   r9   rl   r   new_huggingface_taskC   s   












U5  U &z4_wrap_huggingface_task.<locals>.new_huggingface_task)r:   r   r;   r   r   r   r   )r8   r9   r   r   r   r   r   B   s
     6r   )r,   r   r   N)#r   r   	functoolsr   r2   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   r   typingr   r   r   r   !huggingface_hub.inference._clientr   ImportErrorr   r7   rt   r   r   r   r   r   <module>   s,    
