
    gk                         d dl Z d dlmZmZmZmZ d dlmZmZ d dl	Z	d dl
mZ d dlmZ d dlmZmZ  G d de      Z G d	 d
e      Zy)    N)AnyDictListOptional)	BaseModelField)verbose_logger)CustomLogger)get_async_httpx_clienthttpxSpecialProviderc                       e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<    ed	d
      Zee	ee
f      ed<    edd      Zeed<   d	Zeee      ed<   d	Zee	ee
f      ed<   y	)LLMResponse
latency_msstatus_code
input_textoutput_text	node_typemodelnum_input_tokensnum_output_tokensNzCOptional. When available, logprobs are used to compute Uncertainty.)defaultdescriptionoutput_logprobs.z3timestamp constructed in "%Y-%m-%dT%H:%M:%S" format)r   
created_attagsuser_metadata)__name__
__module____qualname__int__annotations__strr   r   r   r   r   r   r   r   r        Q/var/www/openai/venv/lib/python3.12/site-packages/litellm/integrations/galileo.pyr   r      s    OONJ05Y1OXd38n-  NJ  !%D(49
$.2M8DcN+2r$   r   c                   D    e Zd ZddZd Zd Zdedededefd	Zd
 Zd Z	y)GalileoObserveNc                     g | _         d| _        t        j                  dd       | _        t        j                  dd       | _        d | _        t        t        j                        | _
        y )N   GALILEO_BASE_URLGALILEO_PROJECT_ID)llm_provider)in_memory_records
batch_sizeosgetenvbase_url
project_idheadersr   r   LoggingCallbackasync_httpx_handler)selfs    r%   __init__zGalileoObserve.__init__%   sY    -/		"4d;))$8$?15#9-==$
  	r$   c                     ddd}t         j                  j                  | j                   d|t	        j
                  d      t	        j
                  d      d      }|j                         d	   }ddd
| d| _        y )Nzapplication/jsonz!application/x-www-form-urlencoded)acceptContent-Typez/loginGALILEO_USERNAMEGALILEO_PASSWORD)usernamepassword)urlr3   dataaccess_tokenzBearer )r9   r:   Authorization)litellmmodule_level_clientpostr1   r/   r0   jsonr3   )r6   r3   galileo_login_responserA   s       r%   set_galileo_headersz"GalileoObserve.set_galileo_headers0   s     )?
 ")!<!<!A!A==/(II&89II&89 "B "
 .224^D ).&|n5
r$   c                    d }|3|j                  dd       dk(  st        |t        j                        rd }|S |5t        |t        j                        r|d   d   d   j                         }|S |5t        |t        j                        r|j                  d   j                  }|S |t        |t        j                        r|d   }|S )N	call_type	embeddingchoicesr   messager@   )
get
isinstancerC   EmbeddingResponseModelResponserF   TextCompletionResponserL   textImageResponse)r6   response_objkwargsoutputs       r%   get_output_str_from_responsez+GalileoObserve.get_output_str_from_responseH   s    #JJ{D)[8,(A(ABF  %*'//+
 "),Q/	:??AF  %*'88+
 "))!,11F  %*'//+
 "&)Fr$   rV   rU   
start_timeend_timec                   K   t        j                  d       t        ||z
  j                         dz        }|j	                  dd      }t
        j                  j                  ||      }|j	                  di       xs i }|j	                  dd      }	|j	                  d	d      }
| j                  ||
      }|t        |d||||j	                  dd      |	|
|j                  d      	      }|j                         }| j                  j                  |       t        | j                        | j                  k\  r| j!                          d {    y y y 7 w)NzOn Async Successi  rJ   rC   )r@   rJ   usageprompt_tokensr   completion_tokens)rU   rV      r   -z%Y-%m-%dT%H:%M:%S)	r   r   r   r   r   r   r   r   r   )r	   debugr    total_secondsrN   rC   utilsget_formatted_promptrX   r   strftime
model_dumpr-   appendlenr.   flush_in_memory_records)r6   rV   rU   rY   rZ   _latency_ms
_call_typer   _usager   r   r   request_recordrequest_dicts                 r%   async_log_success_eventz&GalileoObserve.async_log_success_event^   sZ     	/08j0??ADHIZZY7
]]77: 8 

 !!'2.4"!::oq9"JJ':A>77%f 8 
 "(&%'$jj#.!1"3%..'N *446L"")),74))*doo=22444 >' #( 5s   E
EEEc                   K   t        j                  d       | j                  j                  | j                   d| j
                   d| j                  d| j                  i       d {   }|j                  dk(  rt        j                  d       g | _        y t        j                  d       t        j                  d	|j                  |j                         y 7 qw)
Nzflushing in memory recordsz
/projects/z/observe/ingestrecords)r?   r3   rF   r_   z5Galileo Logger:successfully flushed in memory recordsz1Galileo Logger: failed to flush in memory recordsz'Galileo Logger error=%s, status code=%s)
r	   ra   r5   rE   r1   r2   r3   r-   r   rS   )r6   responses     r%   ri   z&GalileoObserve.flush_in_memory_records   s     9:1166==/DOO+<OLLLT334 7 
 
 3&  G &(D"  !TU  9$$
s   A'C)C*A2Cc                 6   K   t        j                  d       y w)NzOn Async Failure)r	   ra   )r6   rV   rU   rY   rZ   s        r%   async_log_failure_eventz&GalileoObserve.async_log_failure_event   s     /0s   )returnN)
r   r   r   r7   rH   rX   r   ro   ri   rt   r#   r$   r%   r'   r'   $   sA    	
0,'5'5),'5:='5IL'5R*1r$   r'   )r/   typingr   r   r   r   pydanticr   r   rC   litellm._loggingr	   "litellm.integrations.custom_loggerr
   &litellm.llms.custom_httpx.http_handlerr   r   r   r'   r#   r$   r%   <module>r{      s9    	 , , %  + ;3) 3(y1\ y1r$   