
    g                         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mZm	Z	 d dl
mZ d dlmZ d dlmZ d dl d dlmZ erd d	lmZ neZd
ZdZ G d de      Zy)    N)datetime)TYPE_CHECKINGAnyDictListOptional)verbose_logger)GCSBucketBase)CommonProxyErrors)*)StandardLoggingPayload)
VertexBasei      c                   Z     e Zd Zddee   ddf fdZd Zd Zd Zde	d	e
d
edefdZ xZS )GCSBucketLoggerNbucket_namereturnc                    ddl m} t        |   |       g | _        t        t        j                  dt                    | _	        t        t        j                  dt                    | _        t        j                  | j                                t        j                         | _        t        |   | j                   | j                  | j                         |dur&t#        dt$        j&                  j(                         y )	Nr   premium_user)r   GCS_BATCH_SIZEGCS_FLUSH_INTERVAL)
flush_lock
batch_sizeflush_intervalTCGCS Bucket logging is a premium feature. Please upgrade to use it. )litellm.proxy.proxy_serverr   super__init__	log_queueintosgetenvGCS_DEFAULT_BATCH_SIZEr   "GCS_DEFAULT_FLUSH_INTERVAL_SECONDSr   asynciocreate_taskperiodic_flushLockr   
ValueErrorr   not_premium_uservalue)selfr   r   	__class__s      _/var/www/openai/venv/lib/python3.12/site-packages/litellm/integrations/gcs_bucket/gcs_bucket.pyr   zGCSBucketLogger.__init__   s    ;[1 13bii(8:PQR!II*,NO
 	D//12!,,... 	 	
 t#UVgVxVxV~V~U  A  $    c                   K   ddl m} |dur&t        dt        j                  j
                         	 t        j                  d||       |j                  dd       }|t        d      | j                  |       | j                  j                  t        |||             y # t        $ r+}t        j                  d	t        |              Y d }~y d }~ww xY ww)
Nr   r   Tr   zHGCS Logger: async_log_success_event logging kwargs: %s, response_obj: %sstandard_logging_object+standard_logging_object not found in kwargspayloadkwargsresponse_objGCS Bucket logging error: )r   r   r*   r   r+   r,   r	   debugget)truncate_standard_logging_payload_contentr    appendGCSLogQueueItem	Exception	exceptionstr)r-   r6   r7   
start_timeend_timer   logging_payloades           r/   async_log_success_eventz'GCSBucketLogger.async_log_success_event1   s     ;t#UVgVxVxV~V~U  A 	L  Z
 AG

)4AO & !NOO::?KNN!!+F  	L$$'A#a&%JKK	Ls/   1CA.B# "C#	C,!CCCCc                 X  K   	 t        j                  d||       |j                  dd       }|t        d      | j	                  |       | j
                  j                  t        |||             y # t        $ r+}t        j                  dt        |              Y d }~y d }~ww xY ww)NzHGCS Logger: async_log_failure_event logging kwargs: %s, response_obj: %sr2   r3   r4   r8   )r	   r9   r:   r*   r;   r    r<   r=   r>   r?   r@   )r-   r6   r7   rA   rB   rC   rD   s          r/   async_log_failure_eventz'GCSBucketLogger.async_log_failure_eventN   s     	L  Z AG

)4AO & !NOO::?KNN!!+F  	L$$'A#a&%JKK	Ls/   B*A.A3 2B*3	B'<!B"B*"B''B*c                   K   | j                   sy| j                   D ]  }|d   }|d   }|j                  dd      xs i }| j                  |       d{   }| j                  |d   |d          d{   }|d   }| j	                  |||      }	 | j                  ||||	       d{     | j                   j                          y7 x7 Y7 %# t        $ r+}	t        j                  d
t        |	              Y d}	~	d}	~	ww xY ww)aG  
        Process queued logs in batch - sends logs to GCS Bucket


        GCS Bucket does not have a Batch endpoint to batch upload logs

        Instead, we
            - collect the logs to flush every `GCS_FLUSH_INTERVAL` seconds
            - during async_send_batch, we make 1 POST request per log to GCS Bucket

        Nr5   r6   r7   vertex_instancepath_service_account)rI   service_account_jsonr   )headersr   object_namerC   z0GCS Bucket error logging payload to GCS bucket: )r    r:   get_gcs_logging_configconstruct_request_headers_get_object_name_log_json_data_on_gcsr>   r	   r?   r@   clear)
r-   log_itemrC   r6   r7   gcs_logging_configrL   r   rM   rD   s
             r/   async_send_batchz GCSBucketLogger.async_send_batchf   s3     ~~H&y1Oh'F#<<=CL9=9T9T: 4 !:: 23D E%78N%O ;  G -];K//VK00# + +$3	 1   ! '< 	34  ((Fs1vhO s`   AD	C D	4C5D	C*C+C/D	D	C	D!D<D	DD	r6   rC   r7   c                 P   t        j                         j                  d      }|j                  dd      $| dt	        j
                         j                   }n| d|j                  dd       }|j                  dd      xs i }|j                  d	d      xs i }d
|v r|d
   }|S )zD
        Get the object name to use for the current payload
        z%Y-%m-%d	error_strNz	/failure-/id litellm_paramsmetadata
gcs_log_id)r   nowstrftimer:   uuiduuid4hex)r-   r6   rC   r7   current_daterM   _litellm_params	_metadatas           r/   rP   z GCSBucketLogger._get_object_name   s      ||~..z:{D1=)N)DJJL4D4D3EFK)N!L,<,<T2,F+GHK !**%5t<B#''
D9?R	9$#L1Kr0   )N)__name__
__module____qualname__r   r@   r   rE   rG   rU   r   r   r   rP   __classcell__)r.   s   @r/   r   r      sQ    HSM T 2L:L0-^-CSV	r0   r   )r&   r"   r`   r   typingr   r   r   r   r   litellm._loggingr	   /litellm.integrations.gcs_bucket.gcs_bucket_baser
   litellm.proxy._typesr   %litellm.types.integrations.gcs_bucketlitellm.types.utilsr   &litellm.llms.vertex_ai.vertex_llm_baser   r$   r%   r    r0   r/   <module>rr      sM     	   ; ; + I 2 3 6AJ  %' "Pm Pr0   