
    ^h                     `    S SK r S SKrS SKrS SKrS SKJr  S SKJrJrJ	r	  S r
 " S S\5      rg)    N)CustomLogger)HTTPHandlerget_async_httpx_clienthttpxSpecialProviderc                      SS K n SSK J n  [        U S5      (       a  UR                  U R                  5      $ UR	                  5       $ )Nr   )datetimeUTC)r   hasattrnowr	   utcnow)dtr   s     X/home/james-whalen/.local/lib/python3.13/site-packages/litellm/integrations/openmeter.pyget_utc_datetimer      s5    !r5||BFF##      c                   L   ^  \ rS rSrS	U 4S jjrS rS\4S jrS rS r	Sr
U =r$ )
OpenMeterLogger   c                    > [         TU ]  5         U R                  5         [        [        R
                  S9U l        [        5       U l        g )N)llm_provider)	super__init__validate_environmentr   r   LoggingCallbackasync_http_handlerr   sync_http_handler)self	__class__s    r   r   OpenMeterLogger.__init__   s<    !!#"8-==#
 "-r   c                     / n[         R                  " SS5      c  UR                  S5        [        U5      S:  a  [	        SR                  U5      5      eg)zH
Expects
OPENMETER_API_ENDPOINT,
OPENMETER_API_KEY,

in the environment
OPENMETER_API_KEYNr   zMissing keys={} in environment.)osgetenvappendlen	Exceptionformat)r   missing_keyss     r   r   $OpenMeterLogger.validate_environment%   sS     99($/7 34|q =DD\RSS !r   kwargsc           	      h   UR                  SUR                  S5      5      n[        5       R                  5       nUR                  SS 5      nUR                  S5      n0 n[        U[        R
                  5      (       d  [        U[        R                  5      (       aO  [        US5      (       a>  US   R                  SS5      US   R                  SS5      US   R                  S	5      S
.nUR                  SS 5      4nU(       d  [        S5      eS[        R                  " SS5      UUUSXeS.UES.$ )Nidlitellm_call_idresponse_costmodelusageprompt_tokensr   completion_tokenstotal_tokens)r0   r1   r2   userzOpenMeter: user is requiredz1.0OPENMETER_EVENT_TYPElitellm_tokenszlitellm-proxy)r.   cost)specversiontyper+   timesubjectsourcedata)getr   	isoformat
isinstancelitellmModelResponseEmbeddingResponser
   r%   r!   r"   )	r   r)   response_objcall_idr   r6   r.   r/   r:   s	            r   _common_logicOpenMeterLogger._common_logic4   s%   ""44E)FG))+zz/40

7#|W%:%:;;,(A(ABBlG,,!-g!6!:!:?A!N%1'%:%>%>?RTU%V ,W 5 9 9. IE ::fd+-9:: !II46FG%#;U;
 	
r   c                    [         R                  " SS5      nUR                  S5      (       a  US-  nOUS-  n[         R                  " S5      nU R                  XS9nSS	R	                  U5      S
.n U R
                  R                  U[        R                  " U5      US9  g ! [        R                   a'  n	[        SU	R                  R                   35      eS n	A	f[         a  n	U	eS n	A	ff = fNOPENMETER_API_ENDPOINTzhttps://openmeter.cloud/zapi/v1/eventsz/api/v1/eventsr    )r)   rC   zapplication/cloudevents+jsonz	Bearer {})zContent-TypeAuthorization)urlr<   headerszOpenMeter logging error: )r!   r"   endswithrE   r&   r   postjsondumpshttpxHTTPStatusErrorr%   responsetext
r   r)   rC   
start_timeend_time_urlapi_key_data_headerses
             r   log_success_event!OpenMeterLogger.log_success_eventR   s    yy13LM==O#D$$D))/0""&"L:(//8

		""''ZZ&  ( 
 $$ 	K7

7HIJJ 	G	s$   3/B# #C-7"CC-&C((C-c                   #    [         R                  " SS5      nUR                  S5      (       a  US-  nOUS-  n[         R                  " S5      nU R                  XS9nSS	R	                  U5      S
.n U R
                  R                  U[        R                  " U5      US9I S h  vN   g  N! [        R                   a'  n	[        SU	R                  R                   35      eS n	A	f[         a  n	U	eS n	A	ff = f7frH   )r!   r"   rN   rE   r&   r   rO   rP   rQ   rR   rS   r%   rT   rU   rV   s
             r   async_log_success_event'OpenMeterLogger.async_log_success_eventl   s     yy13LM==O#D$$D))/0""&"L:(//8

		))..ZZ&  /   
 $$ 	K7

7HIJJ 	G	sH   A2C<52B/ 'B-(B/ ,C<-B/ /C9"C%%C92C44C99C<)r   r   )returnN)__name__
__module____qualname____firstlineno__r   r   dictrE   r^   ra   __static_attributes____classcell__)r   s   @r   r   r      s)    /T
D 
<4 r   r   )rP   r!   rR   r@   "litellm.integrations.custom_loggerr   &litellm.llms.custom_httpx.http_handlerr   r   r   r   r    r   r   <module>rn      s3     	   ; !hl hr   