
    ^h                         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JrJ	r	  S SK
Jr  S SKJr  S SKJr  S SK7  S SKJr  \(       a  S S	KJr  O\rS
rSr " S S\5      rg)    N)datetime)TYPE_CHECKINGAnyDictListOptional)verbose_logger)GCSBucketBase)CommonProxyErrors)*)StandardLoggingPayload)
VertexBasei      c                   j   ^  \ rS rSrSS\\   SS4U 4S jjjrS rS rS r	S	\
S
\S\S\4S jrSrU =r$ )GCSBucketLogger   Nbucket_namereturnc                 
  > SSK Jn  [        TU ]  US9  / U l        [        [        R                  " S[        5      5      U l	        [        [        R                  " S[        5      5      U l        [        R                  " U R                  5       5        [        R                  " 5       U l        [        TU ]  U R                   U R                  U R                  S9  USLa&  [#        S[$        R&                  R(                   35      eg )	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      d/home/james-whalen/.local/lib/python3.13/site-packages/litellm/integrations/gcs_bucket/gcs_bucket.pyr    GCSBucketLogger.__init__   s    ;[1 13bii(8:PQR!II*,NO
 	D//12!,,... 	 	
 t#UVgVxVxV~V~U  A  $    c                   #    SSK Jn  USLa&  [        S[        R                  R
                   35      e [        R                  " SUU5        UR                  SS 5      nUc  [        S5      eU R                  R                  [        XaUS95        g ! [         a,  n[        R                  " S	[        U5       35         S nAg S nAff = f7f)
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getr!   appendGCSLogQueueItem	Exception	exceptionstr)r.   r8   r9   
start_timeend_timer   logging_payloades           r0   async_log_success_event'GCSBucketLogger.async_log_success_event1   s     ;t#UVgVxVxV~V~U  A 	L  Z
 AG

)4AO & !NOO NN!!+  	L$$'A#a&%JKK	Ls/   2C
AB C

C"C=C
CC
c                 6  #     [         R                  " SUU5        UR                  SS 5      nUc  [        S5      eU R                  R                  [        XQUS95        g ! [         a,  n[         R                  " S[        U5       35         S nAg S nAff = f7f)NzHGCS Logger: async_log_failure_event logging kwargs: %s, response_obj: %sr4   r5   r6   r:   )
r	   r;   r<   r+   r!   r=   r>   r?   r@   rA   )r.   r8   r9   rB   rC   rD   rE   s          r0   async_log_failure_event'GCSBucketLogger.async_log_failure_eventN   s     	L  Z AG

)4AO & !NOO NN!!+  	L$$'A#a&%JKK	Ls/   BAA  B 
B*"BBBBc                 $  #    U R                   (       d  g U R                    H  nUS   nUS   nUR                  SS5      =(       d    0 nU R                  U5      I Sh  vN nU R                  US   US   S9I Sh  vN nUS   nU R	                  X2U5      nU R                  UUUUS	9I Sh  vN   M     U R                   R                  5         g Nr NV N'! [         a,  n	[        R                  " S
[        U	5       35         Sn	A	gSn	A	ff = f7f)a  
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

Nr7   r8   r9   vertex_instancepath_service_account)rL   service_account_jsonr   )headersr   object_namerD   z GCS Bucket batch logging error: )r!   r<   get_gcs_logging_configconstruct_request_headers_get_object_name_log_json_data_on_gcsclearr?   r	   r@   rA   )
r.   log_itemrD   r8   r9   gcs_logging_configrO   r   rP   rE   s
             r0   async_send_batch GCSBucketLogger.async_send_batchf   s1     ~~	R NN"*9"5!(+'||NDAGR 55f== # !% > >$67H$I);<R)S !? !  1?"33\ 00# + +$3	 1   ! +0 NN  "% >  	R$$'GAx%PQQ	Rse   DAC CC <C=0C -C."C DC C C 
D!"DDDDr8   rD   r9   c                 n   [         R                  " 5       R                  S5      nUR                  SS5      b%  U S[        R
                  " 5       R                   3nOU SUR                  SS5       3nUR                  SS5      =(       d    0 nUR                  S	S5      =(       d    0 nS
U;   a  US
   nU$ )z4
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.   r8   rD   r9   current_daterP   _litellm_params	_metadatas           r0   rS    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r2   )r   r   r   r!   )N)__name__
__module____qualname____firstlineno__r   rA   r    rF   rI   rX   r   r   r   rS   __static_attributes____classcell__)r/   s   @r0   r   r      s\    HSM T  2L:L0+RZ-CSV	 r2   r   )r'   r#   rd   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    r2   r0   <module>ry      sM     	   ; ; + I 2 3 6AJ  %' "Nm Nr2   