U 췀g<@s\ddlmZddlZddlmZddlmZddlmZddlm Z ddl m Z m Z ddl mZdd lmZmZdd lmZerdd lmZmZmZmZmZmZmZdd lmZz8dd lmZmZddl m!Z!m"Z"erddl#m$Z$m%Z%Wne&k re dYnXGddde Z'ddZ(ddZ)ddZ*ddZ+ddZ,ddZ-dd Z.d!d"Z/dS)#wrapsN)consts)record_token_usage)set_data_normalized)SPANDATA) DidNotEnable Integration)should_send_default_pii)capture_internal_exceptionsevent_from_exception) TYPE_CHECKING)AnyIterableListOptionalCallable AsyncIteratorIterator)Span) CompletionsAsyncCompletions) EmbeddingsAsyncEmbeddings)ChatCompletionMessageParamChatCompletionChunkzOpenAI not installedc@s8eZdZdZdeZd ddZeddZd d ZdS) OpenAIIntegrationopenaizauto.ai.TNcCs,||_d|_|dk r(ddl}|||_dSNr)include_promptstiktoken_encodingtiktokenZ get_encoding)selfrZtiktoken_encoding_namer!r#L/opt/hc_python/lib/python3.8/site-packages/sentry_sdk/integrations/openai.py__init__#s zOpenAIIntegration.__init__cCs4ttjt_ttjt_ttjt_ttjt_dSN) _wrap_chat_completion_creatercreate_wrap_embeddings_creater"_wrap_async_chat_completion_creater_wrap_async_embeddings_createrr#r#r#r$ setup_once-s   zOpenAIIntegration.setup_oncecCs|jdk rt|j|SdSr)r lenZencode_ordinary)r"sr#r#r$ count_tokens8s zOpenAIIntegration.count_tokens)TN) __name__ __module__ __qualname__ identifieroriginr% staticmethodr,r/r#r#r#r$rs    rcCs0t|tjdddd\}}tj||ddS)NrF)typeZhandled)Zclient_optionsZ mechanism)hint)r sentry_sdk get_clientoptionsZ capture_event)exceventr7r#r#r$_capture_exception?s  r=c Cs8d}d}d}t|dr|t|jdr8t|jjtr8|jj}t|jdrZt|jjtrZ|jj}t|jdr|t|jjtr||jj}|dkr|D]}d|kr|||d7}q|dkr|dk r|D]}|||7}qn.t|dr|jD]} t| dr||| j7}q|dkr d}|dkrd}|dkr&d}t ||||dS) Nrusagecompletion_tokens prompt_tokens total_tokenscontentchoicesmessage) hasattrr> isinstancer?intr@rArCrDr) messagesresponsespanZstreaming_message_responsesr/r?r@rArDchoicer#r#r$ _calculate_chat_completion_usageIsL       rLc /sttdkr |||Sd|kr2|||Szt|dWntk r`|||YSXt|d|d<|d|d}|d}tjt j j dtj d |||fVttr܈jrttjttj|ttj|tdrRtr0jr0tdttdd jtdjdddntd rgjfd d }fd d}ttjdkr|_n|_ntdddddW5QRXS)NrHmodelstreamzChat Completion)opnamer4rCz ai.responsescSs|jSr&)rD)xr#r#r$z-_new_chat_completion_common.. _iteratorc 3stD]r}t|drxd}|jD]R}t|drnt|jdrn|jj}t|kr\g||pjd|d7}q$|Vq tdkrttdd}t rj rt t j |t|jW5QRXddddS) NrCrdeltarBcSs d|SNrVjoinchunkr#r#r$rRrSzC_new_chat_completion_common..new_iterator..r rErCrUrBr-appendlistmapr rrrZ AI_RESPONSESrLr/__exit__rQZ choice_indexrKrBZ all_responsesZdata_buf integrationrHZ old_iteratorresrJr#r$ new_iteratorsB         z1_new_chat_completion_common..new_iteratorc st2zz3dHW}t|drd}|jD]R}t|drvt|jdrv|jj}t|krdg||prd|d7}q,|Vq 6tdkrttdd}t rˆj rt t j |t|jW5QRXddddS) NrCrrUrBrVrWcSs d|SrXrYr[r#r#r$rRrSzI_new_chat_completion_common..new_iterator_async..r]rbrcr#r$new_iterator_asyncsB          z7_new_chat_completion_common..new_iterator_asynczZunknown_responseT)r8r9get_integrationriter TypeErrorr_get start_spanrOPZOPENAI_CHAT_COMPLETIONS_CREATEr4 __enter__r r rrrZAI_INPUT_MESSAGESZ AI_MODEL_IDZ AI_STREAMINGrEr`rCrLr/rarTstrr6)fargskwargsrMZ streamingrfrgr#rcr$_new_chat_completion_commonusf         !!   rscs"ddtfdd}|S)Nc _st|f||}zt|\}}}Wn,tk rN}z|jWYSd}~XYnXzLz|||}Wn0tk r}zt||dW5d}~XYnX||WStk r}z|jWYSd}~XYnXdSr&rsnext StopIterationvalue Exceptionr=sendrprqrrgeneresultr#r#r$ _execute_syncs z3_wrap_chat_completion_create.._execute_synccs8tt}|dksd|kr(||Sf||SNrHr8r9rhrrqrrrdr~rpr#r$_sentry_patched_create_sync s zA_wrap_chat_completion_create.._sentry_patched_create_syncrrprr#rr$r's r'cs"ddtfdd}|S)Nc st|f||}zt|\}}}Wn2tk rT}z|jIdHWYSd}~XYnXzRz|||IdH}Wn0tk r}zt||dW5d}~XYnX||WStk r}z|jWYSd}~XYnXdSr&rtrzr#r#r$_execute_asyncs" z:_wrap_async_chat_completion_create.._execute_asynccsDtt}|dksd|kr.||IdHSf||IdHSrrrrrpr#r$_sentry_patched_create_async0szH_wrap_async_chat_completion_create.._sentry_patched_create_asyncrrprr#rr$r*s r*c ostt}|dkr |||Stjtjjdtjd>}d|krt r|j rt |dt rpt |d|dgn@t |dtrt|ddkrt |ddt rt |d|dd|krt |d|d|||fV}d}d}t|dr4t|jd rt |jjtr|jj}t|jd r4t |jjtr4|jj}|dkrR||dpNd }t||d|pb||W5QRSQRXdS) NzOpenAI Embedding Creation)rO descriptionr4inputzai.input_messagesrrMz ai.model_idr>r@rArV)r8r9rhrrlrrmZOPENAI_EMBEDDINGS_CREATEr4r rrFrorr_r-rEr>r@rGrAr/r)rprqrrrdrJrIr@rAr#r#r$_new_embeddings_create_common=sV     rcs"ddtfdd}|S)Nc _st|f||}zt|\}}}Wn,tk rN}z|jWYSd}~XYnXzLz|||}Wn0tk r}zt||dW5d}~XYnX||WStk r}z|jWYSd}~XYnXdSr&rrurvrwrxr=ryrzr#r#r$r~ns z._wrap_embeddings_create.._execute_synccs0tt}|dkr ||Sf||Sr&rrrr#r$rs z<_wrap_embeddings_create.._sentry_patched_create_syncrrr#rr$r)lsr)cs"ddtfdd}|S)Nc st|f||}zt|\}}}Wn2tk rT}z|jIdHWYSd}~XYnXzRz|||IdH}Wn0tk r}zt||dW5d}~XYnX||WStk r}z|jWYSd}~XYnXdSr&rrzr#r#r$rs" z5_wrap_async_embeddings_create.._execute_asynccs<tt}|dkr&||IdHSf||IdHSr&rrrr#r$rszC_wrap_async_embeddings_create.._sentry_patched_create_asyncrrr#rr$r+sr+)0 functoolsrr8rZsentry_sdk.ai.monitoringrZsentry_sdk.ai.utilsrZsentry_sdk.constsrZsentry_sdk.integrationsrr Zsentry_sdk.scoper Zsentry_sdk.utilsr r typingr rrrrrrrZsentry_sdk.tracingrZ!openai.resources.chat.completionsrrZopenai.resourcesrrZopenai.types.chatrr ImportErrorrr=rLrsr'r*rr)r+r#r#r#r$s:       $   ,##/"