o
    h5                     @   st  d dl mZ d dlmZ d dlZd dlmZ d dlmZm	Z	 d dl
mZmZmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZmZmZmZ z&zd dlmZ W n ey^   dZY nw d dlmZm Z  erod dl!m"Z" W n ey{   edw erd dlm#Z#m$Z$m%Z% d dl&m'Z' G dd deZ(dd Z)dd Z*dd Z+dd Z,	d$ddZ-dd Z.d d! Z/d"d# Z0dS )%    wraps)TYPE_CHECKINGN)record_token_usage)set_data_normalizedget_start_span_function)OPSPANDATA
SPANSTATUS)_check_minimum_versionDidNotEnableIntegration)should_send_default_pii)set_span_errored)capture_internal_exceptionsevent_from_exceptionpackage_versionsafe_serialize)	NOT_GIVEN)AsyncMessagesMessages)MessageStreamEventzAnthropic not installed)AnyAsyncIteratorIterator)Spanc                   @   s0   e Zd ZdZde Zd	ddZedd ZdS )
AnthropicIntegration	anthropiczauto.ai.Tc                 C   s
   || _ d S N)include_prompts)selfr    r!   c/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/sentry_sdk/integrations/anthropic.py__init__(   s   
zAnthropicIntegration.__init__c                  C   s.   t d} tt|  ttjt_ttjt_d S )Nr   )r   r   r   _wrap_message_creater   create_wrap_message_create_asyncr   )versionr!   r!   r"   
setup_once,   s   
zAnthropicIntegration.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eventr3   r!   r!   r"   _capture_exception6   s   
r:   c                 C   sX   d}d}t | dr(| j}t |drt|jtr|j}t |dr(t|jtr(|j}||fS )z6
    Get token usage from the Anthropic response.
    r   usageinput_tokensoutput_tokens)hasattrr;   
isinstancer<   intr=   )resultr<   r=   r;   r!   r!   r"   _get_token_usageB   s   
rB   c                 C   s   t  _ t| dr[| jdkr#| jj}||j7 }||j7 }| jjp!|}n8| jdkr)n2| jdkrJt| jdr<|	| jj
 nt| jdrI|	| jj n| jdkrPn| jdkr[|| jj7 }W d	   n1 sew   Y  ||||fS )
zl
    Collect model information, token usage, and collect content blocks from the AI streaming response.
    r/   message_startcontent_block_startcontent_block_deltatextpartial_jsoncontent_block_stopmessage_deltaN)r   r>   r/   messager;   r<   r=   modeldeltaappendrF   rG   )r9   rK   r<   r=   content_blocksr;   r!   r!   r"   _collect_ai_dataS   s,   







rO   c              	   C   sl  | d}|dur^t|dkr^t r^|jr^g }|D ];}| ddkrOd|v rOt|d ttfrO|d D ]}| ddkrM|d	| d
| ddd q3q|| qt| t	j
|dd t| t	j| dd t	jt	jt	jt	jt	jd}| D ]\}}	| |}
|
tur|
durt| |	|
 qz| d}|tur|durt|dkrt| t	jt| dS dS dS dS )zq
    Set input data for the span based on the provided keyword arguments for the anthropic message creation.
    messagesNr   roleusercontentr/   tool_resulttooltool_use_id)rV   output)rQ   rS   Funpackstream)
max_tokensrK   temperaturetop_ktop_ptools)getlenr   r   r?   listtuplerM   r   r	   GEN_AI_REQUEST_MESSAGESGEN_AI_RESPONSE_STREAMINGGEN_AI_REQUEST_MAX_TOKENSGEN_AI_REQUEST_MODELGEN_AI_REQUEST_TEMPERATUREGEN_AI_REQUEST_TOP_KGEN_AI_REQUEST_TOP_Pitemsr   GEN_AI_REQUEST_AVAILABLE_TOOLSr   )spankwargsintegrationrP   normalized_messagesrJ   itemkwargs_keys_to_attributeskey	attributevaluer_   r!   r!   r"   _set_input_datan   s`   



rv   Fc           	      C   s   |  tj| t rX|jrXg g d}|D ]}|d dkr&|d |d  q|d dkr3|d | qt|d dkrGt| tj|d dd	 t|d dkrXt| tj	|d  t
| ||d
 |rj| ddd dS dS )z;
    Set output data for the span based on the AI response.)responserU   r/   rF   rw   tool_userU   r   FrX   )r<   r=   N)set_datar	   GEN_AI_RESPONSE_MODELr   r   rM   ra   r   GEN_AI_RESPONSE_TOOL_CALLSGEN_AI_RESPONSE_TEXTr   __exit__)	rm   ro   rK   r<   r=   rN   finish_spanoutput_messagesrW   r!   r!   r"   _set_output_data   s<   r   c              
   /   s   | d  d u r| |i |S d|vr| |i |S zt|d  W n ty4   | |i | Y S w |dd}t tjd|  tj	d
  t|  | ||fV }t  t|drt|\}}g }|jD ]*}t|dr}||  qnt|d	r||  qnt|d
r|d
|jd qnt t|dd |||dd n@t|dr|j fdd}	 fdd}
tt|jdkr|
 |_n*|	 |_ndd d d d  W d    |S W d    |S W d    |S W d    |S 1 sw   Y  |S )Nro   rP   rK    zchat )opnamer-   rS   to_dict
model_dumprF   )r/   rF   Trm   ro   rK   r<   r=   rN   r~   	_iteratorc               	   3   sb    d } d}d}g }D ]}t || |||\} }}}|V  qt | ||d|ddgdd d S Nr   r   rF   )rF   r/   Tr   rO   r   joinrK   r<   r=   rN   r9   ro   old_iteratorrm   r!   r"   new_iterator  s(   


z3_sentry_patched_create_common.<locals>.new_iteratorc               	     sl   d } d}d}g }2 z3 d H W }t || |||\} }}}|V  q6 t | ||d|ddgdd d S r   r   r   r   r!   r"   new_iterator_async*  s*   


z9_sentry_patched_create_common.<locals>.new_iterator_asyncz<class 'async_generator'>unknown_response)popiter	TypeErrorr`   r   r   GEN_AI_CHATstripr   r-   	__enter__rv   r   r>   rB   rS   rM   r   r   rF   r   getattrr   strr/   ry   r}   )fargsrn   rK   rA   r<   r=   rN   content_blockr   r   r!   r   r"   _sentry_patched_create_common   s~   










V
V
V
VVr   c                    "   dd  t  fdd}|S )Nc              
   _   s   t | g|R i |}z	t|\} }}W n ty) } z	|jW  Y d }~S d }~ww z#z	| |i |}W n tyG } zt| |d d }~ww ||W S  tyb } z	|jW  Y d }~S d }~ww r   r   nextStopIterationru   	Exceptionr:   sendr   r   rn   generA   r8   r!   r!   r"   _execute_syncQ  s(   z+_wrap_message_create.<locals>._execute_syncc                     s   t  t}||d< z6 g| R i |W t  }|d ur@|jtjkrAt  |	d d d  W d    S 1 s:w   Y  S S S t  }|d urj|jtjkrjt  |	d d d  W d    w 1 sew   Y  w Nro   
r4   r5   get_integrationr   get_current_spanstatusr
   ERRORr   r}   r   rn   ro   rm   r   r   r!   r"   _sentry_patched_create_synce  s   z9_wrap_message_create.<locals>._sentry_patched_create_syncr   )r   r   r!   r   r"   r$   O     r$   c                    r   )Nc              
      s   t | g|R i |}z	t|\} }}W n ty- } z|jI d H W  Y d }~S d }~ww z&z| |i |I d H }W n tyN } zt| |d d }~ww ||W S  tyi } z	|jW  Y d }~S d }~ww r   r   r   r!   r!   r"   _execute_asyncx  s*   z2_wrap_message_create_async.<locals>._execute_asyncc                     s   t  t}||d< z9 g| R i |I d H W t  }|d urD|jtjkrEt  |	d d d  W d    S 1 s>w   Y  S S S t  }|d urn|jtjkrnt  |	d d d  W d    w 1 siw   Y  w r   r   r   r   r   r!   r"   _sentry_patched_create_async  s    z@_wrap_message_create_async.<locals>._sentry_patched_create_asyncr   )r   r   r!   r   r"   r&   v  r   r&   )F)1	functoolsr   typingr   r4   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   r   sentry_sdk.constsr   r	   r
   sentry_sdk.integrationsr   r   r   sentry_sdk.scoper   sentry_sdk.tracing_utilsr   sentry_sdk.utilsr   r   r   r   r   r   ImportErroranthropic.resourcesr   r   anthropic.typesr   r   r   r   sentry_sdk.tracingr   r   r:   rB   rO   rv   r   r   r$   r&   r!   r!   r!   r"   <module>   sH    D
0t'