0i+b$ddlmZddlZddlmZddlmZddlmZmZm Z ddl m Z ddl m Z mZddlmZdd lmZdd lmZmZmZdd lmZerdd lmZmZmZmZmZmZmZdd l m!Z! ddl"m#Z# ddl"m%Z%ddl&m'Z'm(Z(ddl)m*Z*m+Z+erddl,m-Z-m.Z.dZ/ ddl0m1Z1m2Z2ddl3m4Z4GddeZ5d)dZ6dZ7dZ8dZ9d)dZ:dZ;d Zd#Z?d$Z@d%ZAd&ZBd'ZCd(ZDy#e$$rdZ#YvwxYw#e$$rdZ%Y|wxYw#e$$r e dwxYw#e$$rdZ/YowxYw)*wrapsN)consts)record_token_usage)set_data_normalizednormalize_message_rolestruncate_and_annotate_messages)SPANDATA) DidNotEnable Integration)should_send_default_pii)set_span_errored)capture_internal_exceptionsevent_from_exceptionsafe_serialize) TYPE_CHECKING)AnyIterableListOptionalCallable AsyncIteratorIterator)Span)NotGiven)Omit) CompletionsAsyncCompletions) EmbeddingsAsyncEmbeddings)ChatCompletionMessageParamChatCompletionChunkzOpenAI not installedT) ResponsesAsyncResponses)ResponseCompletedEventFc8eZdZdZdeZddZedZdZy)OpenAIIntegrationopenaizauto.ai.NcZ||_d|_|ddl}|j||_yyNr)include_promptstiktoken_encodingtiktoken get_encoding)selfr+tiktoken_encoding_namer-s M/opt/hc_python/lib/python3.12/site-packages/sentry_sdk/integrations/openai.py__init__zOpenAIIntegration.__init__;s4.!% ! - %-%:%:;Q%RD " .cttjt_ttjt_t t jt _ttjt_trEttjt_ttjt_yyN)_wrap_chat_completion_creatercreate"_wrap_async_chat_completion_creater_wrap_embeddings_creater_wrap_async_embeddings_creater RESPONSES_API_ENABLED_wrap_responses_creater#_wrap_async_responses_creater$r3r1 setup_oncezOpenAIIntegration.setup_onceEs:+:L:LM "D  # ## 4J4E4EF !>?U?U!V 5i6F6FGI $@AVAV$WN ! !r3cd|j$t|jj|Syr*)r,lenencode_ordinary)r/ss r1 count_tokenszOpenAIIntegration.count_tokensTs-  ! ! -t--==a@A Ar3)TN) __name__ __module__ __qualname__ identifieroriginr2 staticmethodr?rDr>r3r1r'r'7s4J | $FS X Xr3r'ctj}t||r||jdddt |tj j ddd\}}tj||y)Nr(F)typehandled)client_options mechanism)hint) sentry_sdkget_current_spanr__exit__r get_clientoptions capture_event)excmanual_span_cleanup current_spaneventrPs r1_capture_exceptionr[[sq..0L\"|7dD$/& !,,.66#6KE4 U.r3c||D]7}t||stt||ts+t||cSyr*)hasattr isinstancegetattrint)usagenamesnames r1 _get_usagerdms8 5$ Jwud/CS$I5$' ' r3cHd}d}d}d}d} t|drt|jddg}t|jdr!t|jjdg}t|jddg}t|jd r!t|jjd g}t|jd g} |dk(rJ|xsgD]A} t | t rd | vr||| d z }&t | ts7||| z }C|dk(rT||D] } ||| z }n?t|d r3|jD]$} t| ds||| jz }&|xsd}|xsd}|xsd}|xsd}| xsd} t|||||| y)Nrra input_tokens prompt_tokensinput_tokens_details cached_tokens output_tokenscompletion_tokensoutput_tokens_detailsreasoning_tokens total_tokenscontentchoicesmessage)rfinput_tokens_cachedrjoutput_tokens_reasoningrn) r]rdrarhrlr^dictstrrprqr) messagesresponsespanstreaming_message_responsesrDrfrrrjrsrnrqchoices r1_calculate_token_usager{usLMLx!!(..>?2ST 8>>#9 :",33o5F# # NN_.AB  8>>#: ;&0447I6J' #"(..>2BC q~2~G'4(Y'-A WY-? @@ GS) W 55 &  & 26g!66 7 Xy )"**69-!\&..%AAM+  '4L-5!)TM5='4L !/# 7! r3c|jd}||jd}t|tr|g}|t|dkDrt rz|j rnt |}tj}t|||}|@|dk(rt|tj|dnt|tj|dt|tjdt|tj|tj tj"tj$tj&tj(tj*tj,d}|j/D]2\} } |j| } | t1| s&t|| | 4|jd } | @t1| r4t| dkDr%t|tj2t5| yyyy) Nrvinputr embeddingsFunpackr()modelstream max_tokenspresence_penaltyfrequency_penalty temperaturetop_ptools)getr^rurAr r+rrQget_current_scoper rr GEN_AI_EMBEDDINGS_INPUTGEN_AI_REQUEST_MESSAGES GEN_AI_SYSTEMGEN_AI_OPERATION_NAMEGEN_AI_REQUEST_MODELGEN_AI_RESPONSE_STREAMINGGEN_AI_REQUEST_MAX_TOKENSGEN_AI_REQUEST_PRESENCE_PENALTY GEN_AI_REQUEST_FREQUENCY_PENALTYGEN_AI_REQUEST_TEMPERATUREGEN_AI_REQUEST_TOP_Pitems _is_givenGEN_AI_REQUEST_AVAILABLE_TOOLSr) rxkwargs operation integrationrvnormalized_messagesscope messages_datakwargs_keys_to_attributeskey attributevaluers r1_set_input_datarszz*%H::g&(C :  MA  # %  ' '5h?,,.67JDRWX  $L(#(::MRW$(::MRW h44h?h<%;P 3A-r3cn tdr%ttjj|j d |j d t tr g tdrtrrjrfjDcgc](}|j|jj*}}t|dkDrttj|t dj rj#dddyytdr.trjrggd}j$D]t}|j&dk(r#|d j)|j+5|j&d k(sE|j,D]!} |d j)| j.#vt|d dkDr ttj2|d d t|d dkDrttj|d t dj rj#dddyytdr_g j4  fd}  fd} tt'j4dk(r | _y| _yt dj rj#dddyycc}w#t0$r&|d j)| j+YwxYw)Nrrvr}rproutput)rwtool function_callrrqrwFr _iteratorc 3Kd} D]6}t5t|drd}|jD]v}t|drct|jdrM|jj}t |krj g|j |xsd|dz }xnMt|drAt dk(rj gdj |jxsdtr5t|tr%t |j d jd}ddd|9t5t dkDrjDcgc]}dj|}}tr' jrt! t"j$||rt | jdddr j'dddyy#1swYxYwcc}w#1swY1xYww NTrprdeltaroFrr]rprrorAappendr;r^r%r{rwrDjoinr r+rr GEN_AI_RESPONSE_TEXTrScount_tokens_manuallyx choice_indexrzrochunk all_responsesdata_buf finish_spanrrv old_iteratorrwrxs r1 new_iteratorz&_set_output_data..new_iterator2s$( !!02q),'( &'iiF&vw7G & i=+1,,*>*>#&x=L#@$,OOB$7 ( 6 = =gm L(A-L'0!G,x=A-$OOB/  **177=b9-A?U1V.$JJ  '44 16-;3>A"D-.x=1$AI$JRWWU^M$J.0[5P5P+ ("?"?-.$$ )'44 /  dD$/c32F%K/.sHHDG$3H G5G07AG5H$G- )H0G55G>:Hc Kd} 23d{}t5t|drd}|jD]v}t|drct|jdrM|jj}t |krj g|j |xsd|dz }xnMt|drAt dk(rj gdj |jxsdtr5t|tr%t |j d jd}ddd|?7;#1swYxYw6t5t dkDrpDcgc]}dj|ncc}w}}tr' jrt! t"j$||rt | jdddn #1swYnxYwr j'dddyywrrrs r1new_iterator_asyncz,_set_output_data..new_iterator_asyncjs$( !' a02q),'( &'iiF&vw7G & i=+1,,*>*>#&x=L#@$,OOB$7 ( 6 = =gm L(A-L'0!G,x=A-$OOB/  **177=b9-A?U1V.$JJ  '44 16-;3>A 22(D-.x=1$AI$JRWWU^$JM$J.0[5P5P+ ("?"?-.$$ )'44 /.. dD$/s\H EEE H DE 8H E E H !G)4F  AG) H )G2.H z)r]rr GEN_AI_RESPONSE_MODELrrr^rur r+rprq model_dumprArr{rDrSrrLrrtrotextAttributeErrorGEN_AI_RESPONSE_TOOL_CALLSr)rxrwrrrrz response_textoutput_messagesroutput_messagerrrrvrs`` `` @@@r1_set_output_datarsx!D("@"@(..Qzz*%H::g& 8S 9:x# " $)D)D'...F>>-))+.  =!A%#D(*G*GWx4{?W?WX  MM$d +  8 $ " $)D)DO #//;;/1#F+226;;=A[[I-*0..V+J7>>~?R?RS+9 *?6*+a/#77#F+ ?:./!3#(779T x4{?W?WX  MM$d +  ; '$&)) 6 06 0p5 05 0n tH&&' (,G G!3!5H !-H x4{?W?WX  MM$d + W6 .V+J7>>~?R?R?TUVs"-L3L+L43L4c/Ktjjt}|||i|Sd|vr||i|S t |d|j d}d}tjtjj|d|tj}|jt|||||||f}t||||d|S#t $r ||i|cYSwxYww)Nrvrchat oprcrITr)rQrTget_integrationr'iter TypeErrorr start_spanrOP GEN_AI_CHATrI __enter__rrfargsrrrrrxrws r1_new_chat_completion_commonrs'')99:KLK$!&!!$!&!!" VJ  JJw EI  99 {!E7 # '' D  NND&)[9f_$HT8V[dK O) "$!&!!"s*>C3CB C3C0-C3/C00C3c8dtfd}|S)Nc<t|g|i|} t|\}}} ||i|}|j |S#t$r}|jcYd}~Sd}~wwxYw#t$r}t ||dd}~wwxYw#t$r}|jcYd}~Sd}~wwxYwr5rnext StopIterationr Exceptionr[sendrrrgeneresults r1 _execute_syncz3_wrap_chat_completion_create.._execute_syncs)!=d=f= "3iOAtV  "D+F+ 88F# # 77N   ""1%T! "  77N U;AA< A AAA A9&A44A99A<< B BBBctjjt}|d|vr|i|Sg|i|SNrvrQrTrr'rrrrrs r1_sentry_patched_create_synczA_wrap_chat_completion_create.._sentry_patched_create_syncsQ!++-==>OP  *F":d%f% %Q0000r3rrrrs` @r1r6r6s(( 1X11 '&r3c8dtfd}|S)NcjKt|g|i|} t|\}}} ||i|d{}|j |S#t$r}|jd{7cYd}~Sd}~wwxYw7@#t$r}t ||dd}~wwxYw#t$r}|jcYd}~Sd}~wwxYwwr5rrs r1_execute_asyncz:_wrap_async_chat_completion_create.._execute_asyncs)!=d=f= !"3iOAtV  " $1&11 88F# # !==  ! 2 ""1%T! "  77N B3A A2A0A2BB3 A-A(A A("A-#B3(A--B30A22 B;B  BB B0 B+%B0&B3+B00B3cKtjjt}|d|vr|i|d{Sg|i|d{S77wrrrrrrrs r1_sentry_patched_create_asynczH_wrap_async_chat_completion_create.._sentry_patched_create_asyncsd!++-==>OP  *F":D+F++ +#A77777,7s!9AAAAAArrrrs` @r1r8r8s(( 1X88 ('r3c/Ktjjt}|||i|S|j d}d}tj t jj|d|tj5}t|||||||f}t||||d|cdddS#1swYyxYww)Nrr~rrFr) rQrTrr'rrrrGEN_AI_EMBEDDINGSrIrrrs r1_new_embeddings_create_commonrs'')99:KLK$!&!! JJw EI    99 & &{!E7 # ''  fi=D&(x%P   sBC 'B;1 C;CCc8dtfd}|S)Nc@t|g|i|} t|\}}} ||i|}|j |S#t$r}|jcYd}~Sd}~wwxYw#t$r}t |d|dd}~wwxYw#t$r}|jcYd}~Sd}~wwxYwNF)rXrrrrrr[rrs r1rz._wrap_embeddings_create.._execute_sync-s+A??? "3iOAtV  "D+F+ 88F# # 77N   ""1%@T! "  77N sU;AA> A AAA A;&A66A;;A>> B BBBc~tjjt}||i|Sg|i|Sr5rrs r1rz<_wrap_embeddings_create.._sentry_patched_create_syncAJ!++-==>OP  d%f% %Q0000r3rrs` @r1r9r9+(( 1X11 '&r3c8dtfd}|S)NcnKt|g|i|} t|\}}} ||i|d{}|j |S#t$r}|jd{7cYd}~Sd}~wwxYw7@#t$r}t |d|dd}~wwxYw#t$r}|jcYd}~Sd}~wwxYwwrrrs r1rz5_wrap_async_embeddings_create.._execute_asyncOs+A??? !"3iOAtV  " $1&11 88F# # !==  ! 2 ""1%@T! "  77N sB5A A2A0A2BB5 A-A(A A("A-#B5(A--B50A22 B;B  BB B2 B-'B2(B5-B22B5cKtjjt}||i|d{Sg|i|d{S77wr5rrs r1rzC_wrap_async_embeddings_create.._sentry_patched_create_asyncc]!++-==>OP  D+F++ +#A77777,7!5AAA A AArrs` @r1r:r:Ms(( 1X88 ('r3c/Ktjjt}|||i|S|j d}d}tj t jj|d|tj}|jt|||||||f}t||||d|Sw)Nr responsesrrTr) rQrTrr'rrrrGEN_AI_RESPONSESrIrrrrs r1_new_responses_create_commonros'')99:KLK$!&!! JJw EI  99 % %{!E7 # '' D  NND&)[9f_$HT8V[dK OsB?Cc8dtfd}|S)Nc<t|g|i|} t|\}}} ||i|}|j |S#t$r}|jcYd}~Sd}~wwxYw#t$r}t ||dd}~wwxYw#t$r}|jcYd}~Sd}~wwxYwr5rrrrrr[rrs r1rz-_wrap_responses_create.._execute_syncs*1>t>v> "3iOAtV  "D+F+ 88F# # 77N   ""1%T! "  77N rc~tjjt}||i|Sg|i|Sr5rrs r1rz;_wrap_responses_create.._sentry_patched_create_syncrr3rrs` @r1r<r<rr3c8dtfd}|S)NcjKt|g|i|} t|\}}} ||i|d{}|j |S#t$r}|jd{7cYd}~Sd}~wwxYw7@#t$r}t ||dd}~wwxYw#t$r}|jcYd}~Sd}~wwxYwwr5rrs r1rz4_wrap_async_responses_create.._execute_asyncs*1>t>v> !"3iOAtV  " $1&11 88F# # !==  ! 2 ""1%T! "  77N rcKtjjt}||i|d{Sg|i|d{S77wr5rrs r1_sentry_patched_responses_asynczE_wrap_async_responses_create.._sentry_patched_responses_asyncrrr)rr rs` @r1r=r=s(( 1X88 +*r3c`tt|trytt|tryy)zF Check for givenness safely across different openai versions. FT)rr^r)objs r1rrs+  3 9 JsD1 r3)T)E functoolsrrQrsentry_sdk.ai.monitoringrsentry_sdk.ai.utilsrrr sentry_sdk.constsr sentry_sdk.integrationsr r sentry_sdk.scoper sentry_sdk.tracing_utilsrsentry_sdk.utilsrrrtypingrrrrrrrrsentry_sdk.tracingrr(r ImportErrorr!openai.resources.chat.completionsrropenai.resourcesrr openai.types.chatr!r"r;openai.resources.responsesr#r$/openai.types.responses.response_completed_eventr%r'r[rdr{rrrr6r8rr9r:rr<r=rr>r3r1r s?7 '=45 !WWW'/#P<U"DV ! !H/$ :z7 t|,~ F 'F (F.'D(D2'D+D ]  / - ../"!"sZ'C.C'4C4DC$!C4#C$$C4'C1.C40C11C44DDD