
    Cj~                       S SK Jr  S SKrS SKrS SKrS SKrS SKJrJr  S SKJ	r	J
r
JrJrJrJrJr  S SKrS SKJrJr  S SKrS SKJr  S SKJr  S SKJrJr  S S	KJrJrJr  S S
K J!r!J"r"  S SK#J$r$  Sr%Sr& " S S\5      r' " S S\5      r(g)    )annotationsN)datetimetimezone)AnyDictListOptionalTupleUnioncast)	BaseModelField)verbose_logger)CustomLogger)convert_content_list_to_strget_content_from_model_response)AllMessageValuesHttpxBinaryResponseContentResponsesAPIResponse)get_async_httpx_clienthttpxSpecialProvider)IntegrationHealthCheckStatuszhttps://api.galileo.ai  c                      \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S\S	'   S\S
'   S\S'   S\S'   \" SSS9rS\S'   \" SSS9rS\S'   \" SSS9rS\S'   Sr	S\S'   Sr
S\S'   Srg)LLMResponse%   int
latency_msstatus_codestr
input_textoutput_text	node_typemodelnum_input_tokensnum_output_tokensnum_total_tokensNz9Total cost of the LLM call in USD as computed by LiteLLM.)defaultdescriptionzOptional[float]costzCOptional. When available, logprobs are used to compute Uncertainty.zOptional[Dict[str, Any]]output_logprobs.z3timestamp constructed in "%Y-%m-%dT%H:%M:%S" format)r)   
created_atzOptional[List[str]]tagsuser_metadata )__name__
__module____qualname____firstlineno____annotations__r   r*   r+   r,   r-   r.   __static_attributes__r/       n/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/litellm/integrations/galileo.pyr   r   %   s    OONJ!OD/  16Y1O-  NJ  !%D
$.2M+2r6   r   c                     \ rS rSrS&S jr\S'S j5       rS(S jrS)S jrS&S jr	S(S jr
\      S*S j5       r\S	 5       r\S+S
 j5       r\S,S j5       r\S-S j5       r\        S.S j5       r\S-S j5       rS/S jrS0S jr\S1S j5       rS&S jr\S2S j5       rS3S jr\S4S j5       r\S5S j5       r\S6S j5       r\S7S j5       r\S8S j5       r\    S9S j5       r\    S:S j5       r\S5S j5       r  S;         S<S jjr       S=S jr!\S>S  j5       r"        S?S! jr#        S?S" jr$S# r%S$ r&S%r'g)@GalileoObserve>   c                V   / U l         SU l        [        R                  " S5      U l        [        R                  " S5      U l        [        R                  " S5      U l        [        R                  " S5      U l        [        R                  " S5      U l        U R                  [        R                  " S5      5      U l
        U R                  (       a  U R                  (       d  [        U l
        [        U R                  5      U l        S U l        [        [         R"                  S9U l        g )	N   GALILEO_API_KEYGALILEO_PROJECT_IDGALILEO_LOG_STREAM_IDGALILEO_USERNAMEGALILEO_PASSWORDGALILEO_BASE_URL)llm_provider)in_memory_records
batch_sizeosgetenvapi_key
project_idlog_stream_idusernamepassword_normalize_base_urlbase_urlGALILEO_CLOUD_API_BASE_URLbool
use_v2_apiheadersr   r   LoggingCallbackasync_httpx_handlerselfs    r7   __init__GalileoObserve.__init__?   s    -/yy!23))$89YY'>?		"45		"4500;M1NO<<6DMt||,15#9-==$
 r6   c                4    U (       a  U R                  S5      $ g )N/)rstrip)rN   s    r7   rM   "GalileoObserve._normalize_base_urlP   s    ??3''r6   c                    U R                   (       a  U R                  (       d  gU R                  (       a  [        U R                  5      $ [        U R
                  =(       a    U R                  5      $ )NF)rI   rN   rQ   rP   rH   rK   rL   rU   s    r7   _is_configuredGalileoObserve._is_configuredV   s@    dmm??%%DMM3dmm44r6   c                v  #     U R                   (       d
  [        SSS9$ U R                  (       d
  [        SSS9$ U R                  (       d,  U R                  (       a  U R
                  (       d
  [        SSS9$ U R                  5       I S h  vN (       d
  [        SSS9$ U R                  R                  U R                   S3U R                  S9I S h  vN nUR                  S	:  a  [        SS
UR                   3S9$ [        SS S9$  N} N7! [         a   n[        SS[        U5       3S9s S nA$ S nAff = f7f)N	unhealthyz/GALILEO_PROJECT_ID environment variable not set)statuserror_messagez-GALILEO_BASE_URL environment variable not setzZGALILEO_API_KEY or GALILEO_USERNAME and GALILEO_PASSWORD environment variables must be setzGalileo authentication failedz/current_user)urlrR   i  zGalileo API returned HTTP healthyzGalileo health check failed: )rI   r   rN   rQ   rK   rL   _ensure_headersrT   getrR   r   	Exceptionr    )rV   responsees      r7   async_health_check!GalileoObserve.async_health_check]   sB    +	??3&"S 
 ==3&"Q 
 ??DMM3&<  --///3&"A 
 "5599}}o]3 :  H ##s*3&%?@T@T?U#V 
 0yPTUU! 0  	/" =c!fXF 	s   D9D D9D D9<D 6D97D 
DD D94D D
*D =D9>	D D9D 
D 
D6D1+D6,D91D66D9c                  #    U R                   R                  U R                   S3SSS.U R                  U R                  S.S9I S h  vN nUR                  5         UR                  5       S   nSSSU 3S	.U l        g  N67f)
Nz/loginapplication/jsonz!application/x-www-form-urlencoded)acceptContent-Type)rK   rL   )rd   rR   dataaccess_tokenzBearer )ro   rp   Authorization)rT   postrN   rK   rL   raise_for_statusjsonrR   )rV   galileo_login_responserr   s      r7   async_set_galileo_headers(GalileoObserve.async_set_galileo_headers   s     '+'?'?'D'D==/(, C
 !MM MM (E 
(
 
"
 	//1-224^D(.&|n5

"
s   ABA?	7Bc                  #    U R                   b  gU R                  (       a(  U R                  (       d  gSSU R                  S.U l         gU R                  (       a"  U R                  (       a  U R
                  (       d  g U R                  5       I S h  vN   g N! [         a!  n[        R                  " SU5         S nAgS nAff = f7f)NTFrn   )ro   rp   zGalileo-API-Keyz*Galileo Logger: failed to authenticate: %s)
rR   rQ   rH   rK   rL   rN   rx   rh   r   debug)rV   rj   s     r7   rf   GalileoObserve._ensure_headers   s     <<#??<<, 2#'<<DL
 $--DMM	00222 3 	  !MqQ	sB   A<C?B BB CB 
C$C ;C CCc           
        [        U [        5      (       a  U R                  S5      n U (       d  SUS./$ [        U [        5      (       d  SUS./$ / nU  Hf  n[        U[        5      (       d  M  UR                  S5      nU(       d  M4  UR	                  [        U5      [        [        [        U5      S9S.5        Mh     U(       a  U$ SUS./$ )Nmessagesuserrolecontentr   )message)	
isinstancedictrg   listappendr    r   r   r   )r~   r!   galileo_messagesr   r   s        r7   _galileo_input_messages&GalileoObserve._galileo_input_messages   s     h%%||J/H#
;<<(D))#
;<<13Ggt,,;;v&D##I: $%5w ?    ##J788r6   c                     [         R                  " 5       R                  5       R                  =(       d    [        R
                  $ )N)r   now
astimezonetzinfor   utcr/   r6   r7   _local_timezoneGalileoObserve._local_timezone   s&    ||~((*11AX\\Ar6   c                    [        U [        5      (       d  [        U 5      $ U R                  c!  U R	                  [
        R                  5       S9n U R                  [        R                  5      R                  S5      $ )z1Serialize timestamps as UTC ISO-8601 for Galileo.r   z%Y-%m-%dT%H:%M:%SZ)r   r   r    r   replacer9   r   r   r   r   strftime)dts    r7   _format_created_at!GalileoObserve._format_created_at   s^     "h''r7N99 >#A#A#CDB}}X\\*334HIIr6   c                V    U (       a!  [         R                  " SU 5      (       d  U  S3$ U $ )Nz(Z|[+-]\d{2}:?\d{2})$Z)research)r,   s    r7   _normalize_created_at$GalileoObserve._normalize_created_at   s)    bii(@*MM \##r6   c                X   [        U R                  S5      =(       d    S5      n[        U R                  S5      =(       d    S5      n[        U R                  S5      =(       d    S5      nUS:X  a  U(       d  U(       a  X-   nUUUS.nU R                  S5      nUb  [        U5      US'   U$ )Nr%   r   r&   r'   )r%   r&   r'   r*   )r   rg   float)recordr%   r&   r'   metricsr*   s         r7   _token_metrics_from_record)GalileoObserve._token_metrics_from_record   s    vzz*<=BC

+> ? D1Evzz*<=BCq &6:K/C 0!2 0#

 zz&!#DkGFOr6   c                  [         R                  U R                  SS5      5      nSUUUU R                  SS5      U[         R                  U R                  S5      U R                  SS5      5      SU R                  S	S5      S
.U R                  SS5      U R                  S5      S[	        U R                  SS5      5      S-  0[         R                  U 5      ES.nU R                  S5      (       a  U S   US'   U$ )Nr,    llmr#   litellmr~   r!   	assistantr"   r   r      r$   duration_nsr   r   @B )typeidtrace_id	parent_idnamer,   inputoutputr   r$   r   r-   )r9   r   rg   r   r   r   )r   r   span_idr,   spans        r7   _record_to_v2_span!GalileoObserve._record_to_v2_span   s     $99&**\SU:VW
  !JJ{I6$#;;

:&

<(D $!::mR8 "::mS9ZZ(s6::lA#>?)K ;;FC! 
* ::f!&>DLr6   c                   [        [        R                  " 5       5      n[        [        R                  " 5       5      n[        R	                  U R                  SS5      5      nSUU R                  SS5      UU R                  SS5      U R                  SS5      U R                  SS	5      S
[        U R                  SS5      5      S-  0[        R                  U 5      E[        R                  XUS9/S.	$ )Nr,   r   tracer#   r   r!   r"   r   r   r   r   r   r   )r   r   )	r   r   r   r,   r   r   r   r   spans)	r    uuiduuid4r9   r   rg   r   r   r   )r   r   r   r,   s       r7   _record_to_v2_trace"GalileoObserve._record_to_v2_trace   s    tzz|$djjl##99&**\SU:VW
 JJ{I6$ZZb1jj3!::mS9s6::lA#>?)K ;;FC
 11w 2 
 	
r6   c                    U Vs/ s H  o R                  U5      PM     snSSSS.nU R                  (       a  U R                  US'   U$ s  snf )N
api_directFT)traceslogging_methodreliableis_completerJ   )r   rJ   )rV   recordsr   payloads       r7   _build_traces_payload$GalileoObserve._build_traces_payload9  sS    FMNgF//7gN*	#
 '+'9'9GO$ Os   A	c                ,   U R                   (       a  U R                  (       d  g [        U R                  5      nU R	                  U5      nU R
                  (       a  U R                    SU R                   3U4$ U R                    SU R                   S3U4$ )N/ingest/traces/z/v2/projects/z/traces)rN   rI   r   rD   r   rQ   )rV   r   r   s      r7   _get_ingest_request"GalileoObserve._get_ingest_requestD  s    }}DOO t--.,,W5??==/0AB  }}o]4??*;7C
 	
r6   c                    U (       d  0 $ 0 nU R                  5        HF  u  p#UR                  5       S;   a)  U(       a"  [        U5      S:  a  US S  SUSS   3OSX'   MB  X1U'   MH     U$ )N>   authorizationgalileo-api-key      z...z***)itemslowerlen)rR   redactedkeyvalues       r7   _redact_headersGalileoObserve._redact_headers[  so    I#%!--/JCyy{BBu58Z"_uRaykU23ZL1%  !& * r6   c                    [         R                  " SU R                  U R                  U R                  U R
                  [        U R                  5      [        U R                  5      [        U R                  5      5        g )NzGalileo Logger flush config: use_v2_api=%s base_url=%s project_id=%s log_stream_id=%s api_key_set=%s username_set=%s record_count=%s)r   r{   rQ   rN   rI   rJ   rP   rH   rK   r   rD   rU   s    r7   _log_flush_config GalileoObserve._log_flush_configi  sZ    NOOMMOO&&'
	
r6   c                   / nU R                  S/ 5      nU(       d  UR                  S5        [        U5       H  u  p4[        U[        5      (       d  M  S H!  nXT;  d  M
  UR                  SU SU 35        M#     UR                  S5      n[        UR                  S/ 5      5       H~  u  px[        U[        5      (       d  M  S H$  nXX;  d  M
  UR                  SU SU SU 35        M&     U(       d  MO  UR                  S	5      U:w  d  Mf  UR                  SU SU S
35        M     M     U(       a  [
        R                  " SU5        g g )Nr   )r   r   r   ztraces[z].r   r   )r   r   r   z].spans[r   z].trace_id mismatchz<Galileo Logger: ingest /traces payload validation issues: %s)rg   r   	enumerater   r   r   r{   )	r   missing_fieldsr   trace_indexr   fieldr   
span_indexr   s	            r7   _log_v2_payload_validation)GalileoObserve._log_v2_payload_validationv  s<   $&Xr*!!(+"+F"3KeT**0%"))GK=5'*JK 1 yyH$-eii.D$E 
!$--<E(&--%k](:,bP =
 8 4 @"))!+hzlBUV %F #4*   N r6   c                    UR                  S/ 5      n[        R                  " SU[        U[        5      (       a  [        U5      OS5        U R                  (       a  SU;   a  U R                  U5        g g g )Nr   z+Galileo Logger flush URL: %s trace_count=%sr   r   )rg   r   r{   r   r   r   rQ   r   )rV   rd   r   r   s       r7   _log_flush_payload!GalileoObserve._log_flush_payload  sa    Xr*9%fd33CK	

 ??0C7++G4  8?r6   c                   U R                   n[        R                  " SUR                  U5        [        R                  " SUR                  5         [        R                  " SUR                  5       5        g ! [         a     g f = f)Nz+Galileo Logger HTTP error: status=%s url=%sz+Galileo Logger HTTP error response body: %sz+Galileo Logger HTTP error response json: %s)ri   r   r{   r   textrv   rh   )errorrd   ri   s      r7   _log_http_status_error%GalileoObserve._log_http_status_error  su    >>9  	

 	9MM	
	  =  		s   %A7 7
BBc                    U R                  S0 5      =(       d    0 nSU R                  S5      0nUR                  S5      b  US   US'   UR                  S5      b  US   US'   U$ )Noptional_paramsr~   	functionstoolsrg   )kwargsr   prompts      r7   _build_promptGalileoObserve._build_prompt  so     **%6;Ar",fjj.D!E{+7"1+">F;w'3-g6F7Or6   c                j    U c  g[        U [        5      (       a  U $ SS jn[        R                  " XS9$ )Nr   c                Z    [        U S5      (       a  U R                  5       $ [        U 5      $ )N
model_dump)hasattrr   r    )objs    r7   _json_default?GalileoObserve._serialize_galileo_output.<locals>._json_default  s%    sL))~~''s8Or6   r(   )r   r   returnr   )r   r    rv   dumps)r   r   s     r7   _serialize_galileo_output(GalileoObserve._serialize_galileo_output  s2    =eS!!L	
 zz%77r6   c                    U R                  S5      nUb  [        R                  U5      nU(       a  U$ [        R                  " U [
        S9$ )Nr~   r   )rg   r9   _input_text_from_messagesrv   r   r    )r   r~   r   s      r7   _prompt_to_input_text$GalileoObserve._prompt_to_input_text  s?    ::j)!;;HEDzz&#..r6   c                   U R                   (       at  [        U R                   5      S:  a[  U S   S   S   n[        US5      (       a=  UR                  5       n[	        U[
        5      (       a  [        R                  " U5      $ U$ U$ g )Nr   choicesr   rv   )r  r   r   rv   r   r    loads)response_objr   message_jsons      r7   _get_chat_content_for_galileo,GalileoObserve._get_chat_content_for_galileo  ss    C(<(<$=$A"9-a0;Gw''&||~lC00::l33##Nr6   c                    U R                   (       a2  [        U R                   5      S:  a  U R                   S   R                  $ g )Nr   )r  r   r   r
  s    r7   (_get_text_completion_content_for_galileo7GalileoObserve._get_text_completion_content_for_galileo  s9     C(<(<$=$A''*///r6   c                `    [        U S5      (       a  U R                  (       a  U R                  $ g )Nr   )r   r   r  s    r7   &_get_responses_api_content_for_galileo5GalileoObserve._get_responses_api_content_for_galileo  s(     <**|/B/B&&&r6   c                (    SU R                  S5      0$ )zKMatch Langfuse rerank input: prompt = {"messages": kwargs.get("messages")}.r~   r   )r   s    r7   _langfuse_style_rerank_prompt,GalileoObserve._langfuse_style_rerank_prompt  s     FJJz233r6   Nc                   UR                  S5      nU R                  U5      nUS:X  a+  Ub(  [        U[        5      (       a  U R	                  U5      XF4$ Ub9  US;   d  [        U[
        R                  5      (       a  U R	                  U5      SU4$ Ubk  [        U[
        R                  5      (       aL  U R                  U5      nU R	                  U5      U R                  U5      UR                  S5      =(       d    / 4$ Ub)  [        U[        5      (       a  U R	                  U5      SU4$ Ubk  [        U[
        R                  5      (       aL  U R                  U5      nU R	                  U5      U R                  U5      UR                  S5      =(       d    / 4$ UbT  [        U[
        R                  5      (       a5  UR                  SS5      nU R	                  U5      U R                  U5      U4$ UbT  [        U[
        R                  5      (       a5  UR                  S	S5      nU R	                  U5      U R                  U5      U4$ Ubg  [        U[
        R                  5      (       aH  UR                   nU R#                  U5      n[$        R&                  " U[        S
9U R                  U5      U4$ Uba  [        U[(        5      (       aL  U R+                  U5      nU R	                  U5      U R                  U5      UR                  S5      =(       d    / 4$ US:X  aL  UbI  [        U[,        5      (       a4  UR                  S5      n	U R                  U	5      U R                  U5      U	4$ US:X  aM  UbJ  [        U[.        5      (       a5  UR                  SS5      nU R	                  U5      U R                  U5      U4$ Ub[  [        U[.        5      (       aF  [1        U5      nU R	                  U5      U R                  U5      UR                  S5      =(       d    / 4$ U R	                  U5      SUR                  S5      =(       d    / 4$ )z
Mirror Langfuse _get_langfuse_input_output_content for Galileo ingest.

Returns (input_text, output_text, messages_for_span).
	call_typeERRORN)	embedding
aembeddingzembedding-outputr~   zspeech-outputrq   r   r   
_arealtimer   pass_through_endpointri   r   )rg   r   r   r    r  r   EmbeddingResponseModelResponser  r  r   TextCompletionResponser  ImageResponseTranscriptionResponseRerankResponseresultsr  rv   r   r   r  r   r   r   )
rV   r   r
  levelstatus_messager  r   r   rerank_prompt	input_vals
             r7   !_get_galileo_input_output_content0GalileoObserve._get_galileo_input_output_content  s(    JJ{+	##F+ W*>3//--f5~MM#44,(A(ABB --f57I6QQ#
<AVAV(W(W77EF**62..v6

:&,"  #
4)
 )
 --f5NN#
'88)
 )
 BB<PF**62..v6

:&,"  #
<AVAV(W(W!%%fd3F**62..v6  #
'77)
 )
 "%%fd3F**62..v6  #
'00)
 )
 "))F >>vFM

=#6..v6  #
<AU(V(V@@NF**62..v6

:&,"  %(<..

7+I..y9..|<  00(<..!%%j"5F**62..v6  #
<(F(F4\BF**62..v6

:&,"  ))&12vzz*7M7SQSSSr6   c                *    U R                  X!S9u  p4nU$ )Nr   r
  )r*  )rV   r
  r   _r"   s        r7   get_output_str_from_response+GalileoObserve.get_output_str_from_responses  s*     !BB C 
 r6   c                   [        U [        5      (       a  U $ [        U [        5      (       d  g[        U 5       H  n[        U[        5      (       d  M  [        UR                  SS5      5      R                  5       S;   d  MI  UR                  S5      =(       d    Sn[        U[        5      (       a  SR                  S U 5       5      nU(       d  M  [        U5      s  $    U  Hu  n[        U[        5      (       d  M  UR                  S5      =(       d    Sn[        U[        5      (       a  SR                  S U 5       5      nU(       d  Mj  [        U5      s  $    g)zTReturn a plain-string summary of the input suitable for the trace-level input field.r   r   )r   humanr    c              3     #    U  H7  n[        U[        5      (       a  UR                  S S5      O
[        U5      v   M9     g7fr   r   Nr   r   rg   r    .0bs     r7   	<genexpr>;GalileoObserve._input_text_from_messages.<locals>.<genexpr>  7      '!(A .84-@-@fb)c!fL!(   ?Ac              3     #    U  H7  n[        U[        5      (       a  UR                  S S5      O
[        U5      v   M9     g7fr5  r6  r7  s     r7   r:  r;    r<  r=  )r   r    r   reversedr   rg   r   join)r~   msgr   s      r7   r  (GalileoObserve._input_text_from_messages{  s    h$$O(D))H%Cc4((37762&'--/3DD''),2gt,,!hh '!(' G 7w<' & C#t$$''),2gt,,!hh '!(' G 7w<'  r6   c                   #    [         R                  " S5         U R                  UUUUS9I S h  vN   g  N! [         a    [         R                  " S5         g f = f7f)NzOn Async Success)r   r
  
start_timeend_timez;Galileo Logger: unexpected error in async_log_success_event)r   r{   _async_log_success_event_implrh   	exceptionrV   r   r
  rD  rE  s        r7   async_log_success_event&GalileoObserve.async_log_success_event  se      	/0
	44)%!	 5     	$$M	s1   A7 57 A7  AAAAc                L	  #    U R                  5       (       dS  [        R                  " S[        U R                  5      [        U R
                  5      [        U R                  5      5        g UR                  S5      nUc  [        R                  " S5        g [        UR                  S5      =(       d    UR                  S5      =(       d    S5      nU R                  XS9u  pxn	UR                  S5      n
UR                  S5      nU
b  Uc  [        R                  " S	5        [        U[        5      (       a  [        U[        5      (       d  g UnUnUR                  c!  UR                  [        R                  5       S
9nUR                  c!  UR                  [        R                  5       S
9nUR!                  ["        R$                  5      nUR!                  ["        R$                  5      nOX[        R&                  " [)        U
5      ["        R$                  S9n[        R&                  " [)        U5      ["        R$                  S9n[+        S[-        X-
  R/                  5       S-  5      5      n[-        UR                  S5      =(       d    S5      n[-        UR                  S5      =(       d    S5      n[-        UR                  S5      =(       d    S5      nUS:X  a  U(       d  U(       a  UU-   n[1        USUUU[        UR                  S5      =(       d    UR                  S5      =(       d    S5      UUUUR                  S5      [        R3                  U5      S9nUR5                  5       n[        U	[6        5      (       a  U	R                  S5      n	[        U	[8        5      (       a  U	(       a  U	US'   U R:                  R=                  U5        [        R                  " S[?        U R:                  5      5        [?        U R:                  5      [@        :  aQ  [?        U R:                  5      [@        -
  nU R:                  [@        * S  U l        [        RB                  " S[@        U5        [?        U R:                  5      U RD                  :  a  U RG                  5       I S h  vN   g g  N7f)NuY   Galileo Logger: skipping — GALILEO_PROJECT_ID=%s GALILEO_API_KEY=%s GALILEO_BASE_URL=%sstandard_logging_objectz>Galileo Logger: no standard_logging_object in kwargs, skippingr  r   r-  	startTimeendTimezmGalileo Logger: standard_logging_object missing startTime/endTime, falling back to start_time/end_time paramsr   )tzr   r   prompt_tokenscompletion_tokenstotal_tokensr   r$   -response_cost)r   r   r!   r"   r#   r$   r%   r&   r'   r*   r,   r~   z+Galileo Logger: queued record, in_memory=%dzzGalileo Logger: in-memory buffer exceeded %s records; dropped %s oldest record(s). Check Galileo connectivity/credentials.)$r^   r   r{   rP   rI   rH   rN   rg   r    r*  r   r   r   r   r9   r   r   r   r   fromtimestampr   maxr   total_secondsr   r   r   r   r   rD   r   r   GALILEO_MAX_IN_MEMORY_RECORDSwarningrE   flush_in_memory_records)rV   r   r
  rD  rE  slo
_call_typer!   r"   r~   	raw_startraw_endstart_tsend_ts_latency_msr%   r&   r'   request_recordrequest_dictdroppeds                        r7   rF  ,GalileoObserve._async_log_success_event_impl  s     ""$$  kT__%T\\"T]]#	 (.

3L(M;  P GGK HFJJ{$;Hy

 -1,R,R -S -
)
 GGK(	'')$  = j(33:(< < !HF&#++>3Q3Q3S+T}}$~/M/M/OP**8<<8H&&x||4F--eI.>8<<PH++E'Nx||LF!S&"3!B!B!Dt!KLMsww7<1=(; < ABsww~6;!<q &6:K/2CC$"!# cggg&D&**W*=DE-/-)%88B
 &002h%%||J/Hh%%('/L$%%l393t?U?U;V	
 t%%&)FF$0014QQG%)%;%;../&D" ""W-	 t%%&$//9..000 :0s   RR$R"R$c                  #    U R                   (       d  g [        U R                   5      nU R                  5       nUc  [        R                  " S5        g U R                  5       I S h  vN (       d  [        R                  " S5        g Uu  p4U R                  5         U R                  X4S9  [        R                  " SU R                  U R                  5      5        [        R                  " SU5         U R                  R                  UU R                  US9I S h  vN nUR                   (       aR  [        R                  " S	5        [        R                  " S
UR"                  UR$                  5        U R                   S U2	 g [        R                  " S5        [        R                  " SUR$                  UR"                  5        U R&                  (       d  UR"                  S;   a  S U l	        g g g  GN N! [        R                   a0  nU R                  XcS9  [        R                  " SU5         S nAg S nAf[         a!  n[        R                  " SU5         S nAg S nAff = f7f)NuQ   Galileo Logger: missing GALILEO_BASE_URL or GALILEO_PROJECT_ID — skipping flushu@   Galileo Logger: could not set request headers — skipping flush)rd   r   z Galileo Logger flush headers: %sz flushing in memory records to %s)rd   rR   rv   )r   rd   z5Galileo Logger: failed to flush in memory records: %sz6Galileo Logger: successfully flushed in memory recordsz0Galileo Logger flush response: status=%s body=%sz1Galileo Logger: failed to flush in memory recordsz'Galileo Logger error=%s, status code=%s)i  i  )rD   r   r   r   r{   rf   r   r   r   rR   rT   rt   httpxHTTPStatusErrorr   rh   
is_successr   r   rQ   )rV   records_in_payloadingest_requestrd   r   ri   rj   s          r7   rZ  &GalileoObserve.flush_in_memory_records  s    %%
 !!7!78113!  c ))+++  R % C9.  .	
 	?E	!55:: ;  H"   H   B$$
 &&':(:':;  !TU  9$$ ??x';';z'I# (J?o , 
 $$ 	''a'9  G  	  G 		sb   A%I%'G0(B
I%3(G5 G3G5  CI%3G5 5I"	&H4/I%4I"II%I""I%c                8   #    [         R                  " S5        g 7f)NzOn Async Failure)r   r{   rH  s        r7   async_log_failure_event&GalileoObserve.async_log_failure_eventW  s     /0s   )rH   rT   rN   rE   rR   rD   rJ   rL   rI   rQ   rK   )r   None)rN   Optional[str]r   rq  )r   rP   )r   r   )r~   zOptional[Any]r!   r    r   zList[Dict[str, str]])r   zUnion[datetime, Any]r   r    )r,   r    r   r    )r   Dict[str, Any]r   rr  )r   rr  r   r    r   r    r   rr  )r   z
List[dict]r   rr  )r   z$Optional[Tuple[str, Dict[str, Any]]])rR   zOptional[Dict[str, str]]r   zDict[str, str])r   rr  r   rp  )rd   r    r   rr  r   rp  )r   zhttpx.HTTPStatusErrorrd   r    r   rp  )r   rr  r   rr  )r   r   r   r    )r   rr  r   r    )r
  zlitellm.ModelResponser   r   )r
  zlitellm.TextCompletionResponser   rq  )r
  r   r   r   )DEFAULTN)
r   rr  r
  r   r&  r    r'  rq  r   zTuple[str, str, Any])r
  r   r   rr  r   r    )r~   r   r   r    )r   r   r
  r   rD  r   rE  r   )(r0   r1   r2   r3   rW   staticmethodrM   r^   rk   rx   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r*  r/  r  rI  rF  rZ  rn  r5   r/   r6   r7   r9   r9   >   s   
"  
5,\
(0 99-09	9 9< B B 
J 
J  
      	
 
 B 
 
0	
.  
  B5  &   8 8 / / 	 	 4	  *	  4 4 (,yTyT yT 	yT
 &yT 
yTv)7	  @),:=IL _1_1),_1:=_1IL_1BH$T1r6   r9   ))
__future__r   rv   rF   r   r   r   r   typingr   r   r   r	   r
   r   r   rg  pydanticr   r   r   litellm._loggingr   "litellm.integrations.custom_loggerr   8litellm.litellm_core_utils.prompt_templates.common_utilsr   r   litellm.types.llms.openair   r   r   &litellm.llms.custom_httpx.http_handlerr   r   ,litellm.types.integrations.base_health_checkr   rO   rX  r   r9   r/   r6   r7   <module>r~     sq    "  	 	  ' @ @ @  %  + ; 
 V5  !% 3) 32Z1\ Z1r6   