
    Cj                     `    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     p/home/rurouni/.local/share/pipx/venvs/strix-agent/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           	      N   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[        R                  " SS5      R                  5       S:g  nU(       a  UR                  SS 5      OS n	U	cG  UR                  S0 5      n
U
R                  S0 5      nUR                  SS 5      nUb  Un	O[        S5      e[        U	5      n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   OPENMETER_TRUST_REQUEST_USERtruefalseuserlitellm_paramsmetadatauser_api_key_user_idz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"   lowerr%   str)r   r)   response_objcall_idr   r<   r.   r/   trust_request_user
user_paramr7   r8   r9   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 II4f=CCEP 	 2DVZZ-
 #ZZ(8"=N%))*b9H#+<<0F#M #/1
 =>> j/ !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)   rK   zapplication/cloudevents+jsonz	Bearer {})zContent-TypeAuthorization)urlrB   headerszOpenMeter logging error: )r!   r"   endswithrO   r&   r   postjsondumpshttpxHTTPStatusErrorr%   responsetext
r   r)   rK   
start_timeend_time_urlapi_key_data_headerses
             r   log_success_event!OpenMeterLogger.log_success_eventg   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rR   )r!   r"   rX   rO   r&   r   rY   rZ   r[   r\   r]   r%   r^   r_   r`   s
             r   async_log_success_event'OpenMeterLogger.async_log_success_event   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   dictrO   rh   rk   __static_attributes____classcell__)r   s   @r   r   r      s*    /T1
D 1
f4 r   r   )rZ   r!   r\   rF   "litellm.integrations.custom_loggerr   &litellm.llms.custom_httpx.http_handlerr   r   r   r   r    r   r   <module>rx      s3     	   ; !}l }r   