Ë
    õ�Dj/%  ã                   ó  — 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 d dlmZ d dlmZmZmZ 	 d d	lmZmZ erd d
lmZ erd dlmZmZmZ d dlmZ  G d„ de«      Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&y# e$ r	  ed«      ‚w xY w)é    ©Úwraps)ÚTYPE_CHECKINGN)Úrecord_token_usage)ÚOPÚSPANDATA)ÚDidNotEnableÚIntegration)Úshould_send_default_pii)Úcapture_internal_exceptionsÚevent_from_exceptionÚpackage_version)ÚAsyncMessagesÚMessages)ÚMessageStreamEventzAnthropic not installed)ÚAnyÚAsyncIteratorÚIterator)ÚSpanc                   ó2   — e Zd ZdZde› �Zdd„Zed„ «       Zy)ÚAnthropicIntegrationÚ	anthropiczauto.ai.c                 ó   — || _         y ©N)Úinclude_prompts)Úselfr   s     úeC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\sentry_sdk/integrations/anthropic.pyÚ__init__zAnthropicIntegration.__init__    s
   € à.ˆÕó    c                  óÜ   — t        d«      } | €t        d«      ‚| dk  rt        d«      ‚t        t        j                  «      t        _        t        t        j                  «      t        _        y )Nr   zUnparsable anthropic version.)r   é   z!anthropic 0.16 or newer required.)r   r	   Ú_wrap_message_creater   ÚcreateÚ_wrap_message_create_asyncr   )Úversions    r   Ú
setup_oncezAnthropicIntegration.setup_once$   sV   € ô " +Ó.ˆàˆ?ÜÐ>Ó?Ð?à�WÒÜÐBÓCÐCä.¬x¯©Ó?ŒŒÜ9¼-×:NÑ:NÓOŒÕr   N)T)Ú__name__Ú
__module__Ú__qualname__Ú
identifierÚoriginr   Ústaticmethodr&   © r   r   r   r      s.   „ Ø€JØ˜
�|Ð$€Fó/ð ñPó ñPr   r   c                 ó’   — t        | t        j                  «       j                  dddœ¬«      \  }}t        j                  ||¬«       y )Nr   F)ÚtypeÚhandled)Úclient_optionsÚ	mechanism)Úhint)r   Ú
sentry_sdkÚ
get_clientÚoptionsÚcapture_event)ÚexcÚeventr3   s      r   Ú_capture_exceptionr:   3   s?   € ä&ØÜ!×,Ñ,Ó.×6Ñ6Ø&°5Ñ9ô�K€Eˆ4ô
 ×Ñ˜U¨Ö.r   c                 ó*  — d}d}t        | d«      rp| j                  }t        |d«      r&t        |j                  t        «      r|j                  }t        |d«      r&t        |j
                  t        «      r|j
                  }||z   }t        ||||«       y )Nr   ÚusageÚinput_tokensÚoutput_tokens)Úhasattrr<   Ú
isinstancer=   Úintr>   r   )ÚresultÚspanr=   r>   r<   Útotal_tokenss         r   Ú_calculate_token_usagerE   =   s   € à€LØ€MÜˆv�wÔØ—‘ˆÜ�5˜.Ô)¬j¸×9KÑ9KÌSÔ.QØ ×-Ñ-ˆLÜ�5˜/Ô*¬z¸%×:MÑ:MÌsÔ/SØ!×/Ñ/ˆMà -Ñ/€LÜ�t˜\¨=¸,ÕGr   c                 ó‚   — g }| D ]7  }t        |d«      sŒ|j                  |j                  |j                  dœ«       Œ9 |S )z,
    Get JSON of a Anthropic responses.
    Útext©r/   rG   )r?   Úappendr/   rG   )ÚcontentÚ	responsesÚitems      r   Ú_get_responsesrM   L   sK   € ð
 €IØò ˆÜ�4˜Õ Ø×Ñà ŸI™IØ ŸI™Iñõðð Ðr   c                 ó  — t        «       5  t        | d«      r×| j                  dk(  r5| j                  j                  }||j
                  z  }||j                  z  }n“| j                  dk(  rnƒ| j                  dk(  r<t        | j                  d«      r^|j                  | j                  j                  «       n8| j                  dk(  rn(| j                  dk(  r|| j                  j                  z  }ddd«       |||fS # 1 sw Y   ŒxY w)	zV
    Count token usage and collect content blocks from the AI streaming response.
    r/   Úmessage_startÚcontent_block_startÚcontent_block_deltarG   Úcontent_block_stopÚmessage_deltaN)
r   r?   r/   Úmessager<   r=   r>   ÚdeltarI   rG   )r9   r=   r>   Úcontent_blocksr<   s        r   Ú_collect_ai_datarW   ]   sæ   € ô
 
%Ó	&ñ ;Ü�5˜&Ô!Ø�z‰z˜_Ò,ØŸ™×+Ñ+�Ø × 2Ñ 2Ñ2�Ø ×!4Ñ!4Ñ4‘Ø—‘Ð4Ò4ØØ—‘Ð4Ò4Ü˜5Ÿ;™;¨Ô/Ø"×)Ñ)¨%¯+©+×*:Ñ*:Õ;Ø—‘Ð3Ò3ØØ—‘˜Ò.Ø §¡×!:Ñ!:Ñ:�÷;ð  ˜¨Ð6Ð6÷!;ð ;ús   ‹C$C<Ã<Dc                 ó>  — t        «       5  t        «       rA|j                  r5dj                  |«      }| j	                  t
        j                  d|dœg«       ||z   }t        | |||«       | j	                  t
        j                  d«       ddd«       y# 1 sw Y   yxY w)zX
    Add token usage and content blocks from the AI streaming response to the span.
    Ú rG   rH   TN)	r   r   r   ÚjoinÚset_datar   ÚAI_RESPONSESr   ÚAI_STREAMING)rC   Úintegrationr=   r>   rV   Úcomplete_messagerD   s          r   Ú_add_ai_data_to_spanr`   u   s‹   € ô 
%Ó	&ñ 	3Ü"Ô$¨×)DÒ)DØ!Ÿw™w ~Ó6ÐØ�M‰MÜ×%Ñ%Ø Ð*:Ñ;Ð<ôð $ mÑ3ˆÜ˜4 ¨}¸lÔKØ�‰”h×+Ñ+¨TÔ2÷	3÷ 	3ñ 	3ús   ‹A?BÂBc              /   ó¤  ‡‡	‡
K  — |j                  d«      Š‰€ | |i |¤ŽS d|vr | |i |¤ŽS 	 t        |d   «       t        j                  t
        j                  dt        j                  ¬«      Š
‰
j                  «        | ||f–—}t        |d   «      }|j                  d«      }t        «       5  ‰
j                  t        j                  |«       ‰
j                  t        j                   d«       t#        «       r,‰j$                  r ‰
j                  t        j&                  |«       t)        |d«      rit#        «       r?‰j$                  r3‰
j                  t        j*                  t-        |j.                  «      «       t1        |‰
«       ‰
j3                  d d d «       n†t)        |d«      rU|j4                  Š	ˆˆ	ˆ
fd	„}ˆˆ	ˆ
fd
„}t7        t9        |j4                  «      «      dk(  r |«       |_        n2 |«       |_        n%‰
j                  dd«       ‰
j3                  d d d «       d d d «       |S # t        $ r  | |i |¤ŽcY S w xY w# 1 sw Y   |S xY w­w)Nr^   ÚmessageszAnthropic messages create)ÚopÚdescriptionr+   ÚmodelFrJ   Ú	_iteratorc               3   ó¸   •K  — d} d}g }‰D ](  }t        || ||«      \  } }}|j                  dk7  sŒ%|–— Œ* t        ‰‰| ||«       ‰j                  d d d «       y ­w©Nr   Úmessage_stop©rW   r/   r`   Ú__exit__©r=   r>   rV   r9   r^   Úold_iteratorrC   s       €€€r   Únew_iteratorz3_sentry_patched_create_common.<locals>.new_iterator´   sz   øè ø€ à �Ø !�Ø!#�à)ò $�EÜBRØ˜|¨]¸NóCÑ?�L -°ð —z‘z ^Ó3Ø#›ð$ô %Ø˜+ |°]ÀNôð —‘˜d D¨$Õ/ùs
   ƒ-A±)Ac                 óÊ   •K  — d} d}g }‰2 3 d {  –—† }t        || ||«      \  } }}|j                  dk7  sŒ+|­–— Œ17 Œ,6 t        ‰‰| ||«       ‰j                  d d d «       y ­wrh   rj   rl   s       €€€r   Únew_iterator_asyncz9_sentry_patched_create_common.<locals>.new_iterator_asyncÆ   s‚   øè ø€ à �Ø !�Ø!#�à#/÷ $ð $˜%ÜBRØ˜|¨]¸NóCÑ?�L -°ð —z‘z ^Ó3Ø#œð$ø <ô %Ø˜+ |°]ÀNôð —‘˜d D¨$Õ/ùs$   ƒ	A#Œ?�=‘?”"A#·A#½?¿$A#z<class 'async_generator'>Úunknown_responseT)ÚpopÚiterÚ	TypeErrorr4   Ú
start_spanr   ÚANTHROPIC_MESSAGES_CREATEr   r+   Ú	__enter__ÚlistÚgetr   r[   r   ÚAI_MODEL_IDr]   r   r   ÚAI_INPUT_MESSAGESr?   r\   rM   rJ   rE   rk   rf   Ústrr/   )ÚfÚargsÚkwargsrB   rb   re   rn   rp   r^   rm   rC   s           @@@r   Ú_sentry_patched_create_commonr€   ˆ   s  úè ø€ à—*‘*˜]Ó+€KØÐÙ�$Ð!˜&Ñ!Ð!à˜ÑÙ�$Ð!˜&Ñ!Ð!ð"ÜˆV�JÑÔ ô × Ñ Ü×'Ñ'Ø/Ü#×*Ñ*ô€Dð
 	‡N�NÔà�d˜F�?Ñ"€Fô �F˜:Ñ&Ó'€HØ�J‰J�wÓ€Eä	$Ó	&ñ <,Ø�‰”h×*Ñ*¨EÔ2Ø�‰”h×+Ñ+¨UÔ3ä"Ô$¨×)DÒ)DØ�M‰Mœ(×4Ñ4°hÔ?ä�6˜9Ô%Ü&Ô(¨[×-HÒ-HØ—‘œh×3Ñ3´^ÀFÇNÁNÓ5SÔTÜ" 6¨4Ô0Ø�M‰M˜$  dÕ+ô �V˜[Ô)Ø!×+Ñ+ˆLö0ö$0ô$ ”4˜×(Ñ(Ó)Ó*Ð.IÒIÙ#5Ó#7�Õ á#/£>�Õ ð �M‰MÐ,¨dÔ3Ø�M‰M˜$  dÔ+÷y<,ð| €Møô] ò "Ù�$Ð!˜&Ñ!Ò!ð"ú÷ <,ð| €MüsA   …(I®H, ¼A4IÂ0E2IÈ"
IÈ,I È=IÈ?I É IÉIÉIc                 ó8   ‡ ‡— d„ Št        ‰ «      ˆˆ fd„«       }|S )Nc                 ó<  — t        | g|¢­i |¤Ž}	 t        |«      \  } }}	 	  | |i |¤Ž}|j                  |«      S # t        $ r}|j                  cY d }~S d }~ww xY w# t        $ r}t        |«       |d ‚d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wr   ©r€   ÚnextÚStopIterationÚvalueÚ	Exceptionr:   Úsend©r}   r~   r   ÚgenÚerB   r8   s          r   Ú_execute_syncz+_wrap_message_create.<locals>._execute_syncæ   sª   € ä+¨AÐ?°Ò?¸Ñ?ˆð	Ü" 3›i‰OˆAˆt�Vð		ð$Ù˜DÐ+ FÑ+�ð
 —8‘8˜FÓ#Ð#øô ò 	Ø—7‘7�Nûð	ûô ò $Ü" 3Ô'Ø˜tÐ#ûð$ûô
 ò 	Ø—7‘7�Nûð	úsU   ‘; ¢A ªA< »	AÁAÁAÁAÁ	A9Á&A4Á4A9Á9A< Á<	BÂBÂBÂBc                  ót   •— t        j                  «       j                  t        «      }||d<    ‰‰g| ¢­i |¤ŽS ©Nr^   ©r4   r5   Úget_integrationr   )r~   r   r^   rŒ   r}   s      €€r   Ú_sentry_patched_create_syncz9_wrap_message_create.<locals>._sentry_patched_create_syncú   s>   ø€ ô !×+Ñ+Ó-×=Ñ=Ô>RÓSˆØ +ˆˆ}Ñá˜QÐ0 Ò0¨Ñ0Ð0r   r   )r}   r‘   rŒ   s   ` @r   r"   r"   ä   s(   ù€ òô( ˆ1ƒXô1ó ð1ð 'Ð&r   c                 ó8   ‡ ‡— d„ Št        ‰ «      ˆˆ fd„«       }|S )Nc              Ÿ   ój  K  — t        | g|¢­i |¤Ž}	 t        |«      \  } }}	 	  | |i |¤Žƒ d {  –—† }|j                  |«      S # t        $ r}|j                  ƒ d {  –—†7  cY d }~S d }~ww xY w7 Œ@# t        $ r}t        |«       |d ‚d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY w­wr   rƒ   r‰   s          r   Ú_execute_asyncz2_wrap_message_create_async.<locals>._execute_async  s¹   è ø€ ä+¨AÐ?°Ò?¸Ñ?ˆð	!Ü" 3›i‰OˆAˆt�Vð		ð$Ù  $Ð1¨&Ñ1×1�ð
 —8‘8˜FÓ#Ð#øô ò 	!ØŸ™—=�=Õ ûð	!úð
 2ùÜò $Ü" 3Ô'Ø˜tÐ#ûð$ûô
 ò 	Ø—7‘7�Nûð	üs–   ‚B3“A ¤A2 ¯A0°A2 ´B ÁB3Á	A-ÁA(ÁA ÁA(Á"A-Á#B3Á(A-Á-B3Á0A2 Á2	BÁ;B	Â	BÂB Â	B0ÂB+Â%B0Â&B3Â+B0Â0B3c               Ÿ   ó�   •K  — t        j                  «       j                  t        «      }||d<    ‰‰g| ¢­i |¤Žƒ d {  –—† S 7 Œ­wrŽ   r�   )r~   r   r^   r”   r}   s      €€r   Ú_sentry_patched_create_asyncz@_wrap_message_create_async.<locals>._sentry_patched_create_async  sH   øè ø€ ô !×+Ñ+Ó-×=Ñ=Ô>RÓSˆØ +ˆˆ}Ñá# AÐ7¨Ò7°Ñ7×7Ð7Ð7ús   ƒ<A¿AÁ Ar   )r}   r–   r”   s   ` @r   r$   r$     s(   ù€ òô( ˆ1ƒXô8ó ð8ð (Ð'r   )'Ú	functoolsr   Útypingr   r4   Úsentry_sdk.ai.monitoringr   Úsentry_sdk.constsr   r   Úsentry_sdk.integrationsr	   r
   Úsentry_sdk.scoper   Úsentry_sdk.utilsr   r   r   Úanthropic.resourcesr   r   Úanthropic.typesr   ÚImportErrorr   r   r   Úsentry_sdk.tracingr   r   r:   rE   rM   rW   r`   r€   r"   r$   r-   r   r   ú<module>r¢      s˜   ðÝ Ý  ã Ý 7ß *ß =Ý 4÷ñ ð2ß;áÝ6ñ ß3Ñ3Ý'ôP˜;ô Pò./òHòò"7ò03ò&Yòx'óB(øðc ò 2Ù
Ð0Ó
1Ð1ð2ús   ¸A> Á>B