U 췀g/%@s&ddlmZddlmZddlZddlmZddlmZm Z ddl m Z m Z ddl mZddlmZmZmZz$dd lmZmZerdd lmZWnek re d YnXerdd lmZmZmZdd lmZGddde ZddZddZ ddZ!ddZ"ddZ#ddZ$ddZ%ddZ&dS) wraps) TYPE_CHECKINGN)record_token_usage)OPSPANDATA) DidNotEnable Integration)should_send_default_pii)capture_internal_exceptionsevent_from_exceptionpackage_version) AsyncMessagesMessages)MessageStreamEventzAnthropic not installed)Any AsyncIteratorIterator)Spanc@s0eZdZdZdeZd ddZeddZdS) AnthropicIntegration anthropiczauto.ai.TcCs ||_dSN)include_prompts)selfrrO/opt/hc_python/lib/python3.8/site-packages/sentry_sdk/integrations/anthropic.py__init__ szAnthropicIntegration.__init__cCsDtd}|dkrtd|dkr(tdttjt_ttjt_dS)NrzUnparsable anthropic version.)rz!anthropic 0.16 or newer required.)r r_wrap_message_creatercreate_wrap_message_create_asyncr)versionrrr setup_once$s zAnthropicIntegration.setup_onceN)T)__name__ __module__ __qualname__ identifieroriginr staticmethodr"rrrrrs   rcCs0t|tjdddd\}}tj||ddS)NrF)typeZhandled)Zclient_optionsZ mechanism)hint)r sentry_sdk get_clientoptionsZ capture_event)exceventr*rrr_capture_exception3s  r0cCsjd}d}t|drP|j}t|dr4t|jtr4|j}t|drPt|jtrP|j}||}t||||dS)Nrusage input_tokens output_tokens)hasattrr1 isinstancer2intr3r)resultspanr2r3r1 total_tokensrrr_calculate_token_usage=s r:cCs0g}|D]"}t|dr||j|jdq|S)z, Get JSON of a Anthropic responses. textr)r;)r4appendr)r;)content responsesitemrrr_get_responsesLs rAc Cstt|dr|jdkr:|jj}||j7}||j7}nT|jdkrFnH|jdkrlt|jdr||jj n"|jdkrxn|jdkr||jj7}W5QRX|||fS)zV Count token usage and collect content blocks from the AI streaming response. r) message_startZcontent_block_startZcontent_block_deltar;Zcontent_block_stopZ message_delta) r r4r)messager1r2r3deltar=r;)r/r2r3content_blocksr1rrr_collect_ai_data]s          rFc CsftVtr4|jr4d|}|tjd|dg||}t|||||tjdW5QRXdS)zX Add token usage and content blocks from the AI streaming response to the span. r;r<TN) r r rjoinset_datar AI_RESPONSESr AI_STREAMING)r8 integrationr2r3rEZcomplete_messager9rrr_add_ai_data_to_spanus   rMc /s|ddkr|||Sd|kr.|||Szt|dWntk r\|||YSXtjtjdtjd |||fV}t |d}| d}t  tj| tjdtrڈjrڈ tj|t|dr$tr jr  tjt|jt|dddntt|dr~|jfd d }fd d }tt|jd krt||_n||_n dddddW5QRX|S)NrLmessageszAnthropic messages create)op descriptionr'modelFr> _iteratorc3s\d}d}g}D](}t||||\}}}|jdkr|Vqt|||ddddSNrZ message_stoprFr)rM__exit__r2r3rEr/rLZ old_iteratorr8rr new_iterators(  z3_sentry_patched_create_common..new_iteratorcsfd}d}g}2z03dHW}t||||\}}}|jdkr|Vq6t|||ddddSrSrTrVrWrrnew_iterator_asyncs(   z9_sentry_patched_create_common..new_iterator_asynczZunknown_responseT)popiter TypeErrorr+Z start_spanrZANTHROPIC_MESSAGES_CREATErr' __enter__listgetr rIrZ AI_MODEL_IDrKr rZAI_INPUT_MESSAGESr4rJrAr>r:rUrRstrr))fargskwargsr7rNrQrXrYrrWr_sentry_patched_create_commonsL             rdcs"ddtfdd}|S)Nc _st|f||}zt|\}}}Wn,tk rN}z|jWYSd}~XYnXzLz|||}Wn0tk r}zt||dW5d}~XYnX||WStk r}z|jWYSd}~XYnXdSrrdnext StopIterationvalue Exceptionr0sendrarbrcgener7r.rrr _execute_syncs z+_wrap_message_create.._execute_synccs&tt}||d<f||SNrLr+r,Zget_integrationrrbrcrLrnrarr_sentry_patched_create_syncsz9_wrap_message_create.._sentry_patched_create_syncr)rarsrrrrrsrcs"ddtfdd}|S)Nc st|f||}zt|\}}}Wn2tk rT}z|jIdHWYSd}~XYnXzRz|||IdH}Wn0tk r}zt||dW5d}~XYnX||WStk r}z|jWYSd}~XYnXdSrrerkrrr_execute_asyncs" z2_wrap_message_create_async.._execute_asynccs,tt}||d<f||IdHSrorprqrtrarr_sentry_patched_create_asyncsz@_wrap_message_create_async.._sentry_patched_create_asyncr)rarvrrurr sr )' functoolsrtypingrr+Zsentry_sdk.ai.monitoringrZsentry_sdk.constsrrZsentry_sdk.integrationsrr Zsentry_sdk.scoper Zsentry_sdk.utilsr r r Zanthropic.resourcesrrZanthropic.typesr ImportErrorrrrZsentry_sdk.tracingrrr0r:rArFrMrdrr rrrrs2      \!