
    g                     `    d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	 d Z
 G d de      Zy)    N)CustomLogger)HTTPHandlerget_async_httpx_clienthttpxSpecialProviderc                      dd l } ddl m } t        | d      r|j                  | j                        S |j	                         S )Nr   )datetimeUTC)r   hasattrnowr	   utcnow)dtr   s     S/var/www/openai/venv/lib/python3.12/site-packages/litellm/integrations/openmeter.pyget_utc_datetimer      s2    !r5||BFF##      c                   >     e Zd Zd fdZd ZdefdZd Zd Z xZ	S )OpenMeterLoggerc                     t         |           | j                          t        t        j
                        | _        t               | _        y )N)llm_provider)	super__init__validate_environmentr   r   LoggingCallbackasync_http_handlerr   sync_http_handler)self	__class__s    r   r   zOpenMeterLogger.__init__   s<    !!#"8-==#
 "-r   c                     g }t        j                  dd      |j                  d       t        |      dkD  rt	        dj                  |            y)zp
        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   z$OpenMeterLogger.validate_environment%   sS     99($/7 34|q =DD\RSS !r   kwargsc           	      @   |j                  d|j                  d            }t               j                         }|j                  dd       }|j                  d      }i }t        |t        j
                        st        |t        j                        rJt        |d      r>|d   j                  dd      |d   j                  dd      |d   j                  d	      d
}|j                  dd       f}|st        d      dt        j                  dd      |||d||d|dS )Nidlitellm_call_idresponse_costmodelusageprompt_tokensr   completion_tokenstotal_tokens)r-   r.   r/   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   r3   r+   r,   r7   s	            r   _common_logiczOpenMeterLogger._common_logic4   s   ""44E)FG))+zz/40

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

7HIJJ 	G	s$   01B" "C*5"CC*#C%%C*c                   K   t        j                  dd      }|j                  d      r|dz  }n|dz  }t        j                  d      }| j                  ||      }dd	j	                  |      d
}	 | j
                  j                  |t        j                  |      |       d {    y 7 # t        j                  $ r'}	t        d|	j                  j                         d }	~	wt        $ r}	|	d }	~	ww xY wwrD   )r   r    rJ   rB   r$   r   rK   rL   rM   rN   rO   r#   rP   rQ   rR   s
             r   async_log_success_eventz'OpenMeterLogger.async_log_success_eventl   s     yy13LM==O#D$$D))/0""&|"L:(//8

		))..ZZ&  /   
 $$ 	K7

7HIJJ 	G	sH   A/C924B. &B,'B. +C9,B. .C6"C##C6/C11C66C9)returnN)
__name__
__module____qualname__r   r   dictrB   rZ   r\   __classcell__)r   s   @r   r   r      s$    /T
D 
<4r   r   )rL   r   rN   r=   "litellm.integrations.custom_loggerr   &litellm.llms.custom_httpx.http_handlerr   r   r   r   r    r   r   <module>rf      s3     	   ; !hl hr   