
    g7                     ^    d Z ddlZddlZddlmZmZ ddlZddlmZ ddl	m
Z
  G d de
      Zy)z|
Custom Logger that handles batching logic 

Use this if you want your logs to be stored in memory and flushed periodically
    N)ListOptional)verbose_logger)CustomLoggerc            	       p     e Zd Z	 	 	 d
deej
                     dee   dee   ddf fdZd Zd Z	d	 Z
 xZS )CustomBatchLoggerN
flush_lock
batch_sizeflush_intervalreturnc                     g | _         |xs t        j                  | _        |xs t        j                  | _        t        j                         | _        || _        t        | (  di | y)z
        Args:
            flush_lock (Optional[asyncio.Lock], optional): Lock to use when flushing the queue. Defaults to None. Only used for custom loggers that do batching
        N )	log_queuelitellmDEFAULT_FLUSH_INTERVAL_SECONDSr   DEFAULT_BATCH_SIZEr
   timelast_flush_timer	   super__init__)selfr	   r
   r   kwargs	__class__s        ]/var/www/openai/venv/lib/python3.12/site-packages/litellm/integrations/custom_batch_logger.pyr   zCustomBatchLogger.__init__   sV      ",V0V0V)GW-G-G#yy{$"6"    c                    K   	 t        j                  | j                         d {    t        j                  d| j                   d       | j                          d {    c7 @7 w)Nz"CustomLogger periodic flush after z seconds)asynciosleepr   r   debugflush_queuer   s    r   periodic_flushz CustomBatchLogger.periodic_flush%   sd     -- 3 3444  4T5H5H4IR ""$$$ 4 %s!   $A+A':A+!A)"A+)A+c                   K   | j                   y | j                   4 d {    | j                  rtt        j                  dt	        | j                               | j                          d {    | j                  j                          t        j                         | _        d d d       d {    y 7 7 J7 	# 1 d {  7  sw Y   y xY ww)Nz)CustomLogger: Flushing batch of %s events)	r	   r   r   r   lenasync_send_batchclearr   r   r!   s    r   r    zCustomBatchLogger.flush_queue-   s     ??"???~~$$?T^^AT ++---$$&'+yy{$ #??
 . #???sW   CB6CA	B<-B8.7B<%C0B:1C8B<:C<CCC
Cc                    K   y w)Nr   )r   argsr   s      r   r%   z"CustomBatchLogger.async_send_batch:   s	     s   )NNN)__name__
__module____qualname__r   r   Lockintr   r"   r    r%   __classcell__)r   s   @r   r   r      sY     .2$((,	#W\\*# SM# !	# 
#&%3r   r   )__doc__r   r   typingr   r   r   litellm._loggingr   "litellm.integrations.custom_loggerr   r   r   r   r   <module>r3      s*      !  + ;+ +r   