
    AHj                     v    d Z ddlZddlZddlmZ ddlmZmZ ddlm	Z	 ddl
mZmZmZ ddlmZ  G d	 d
e      Zy)ziGCS Cache implementation
Supports syncing responses to Google Cloud Storage Buckets using HTTP requests.
    N)Optional)print_verboseverbose_logger)GCSBucketBase)get_async_httpx_client_get_httpx_clienthttpxSpecialProvider   )	BaseCachec            	            e Zd Z	 	 	 ddee   dee   dee   ddf fdZdefdZd Zd	 Z	d
 Z
d Zd Zd Zd Z xZS )GCSCacheNbucket_namepath_service_accountgcs_pathreturnc                 4   t         |           |xs t        d       j                  | _        |xs t        d       j
                  | _        |r|j                  d      dz   nd| _        t        t        j                        | _        t               | _        y )Nr   / )llm_provider)super__init__r   BUCKET_NAMEr   path_service_account_jsonr   rstrip
key_prefixr   r	   LoggingCallbackasync_clientr   sync_client)selfr   r   r   	__class__s       Q/root/tools/cai/cai_env/lib/python3.12/site-packages/litellm/caching/gcs_cache.pyr   zGCSCache.__init__   s     	&U-D*I*U*U  I.HH 	! 9A(//#.4b2-==
 -.    c                     t        | j                        }| j                  |_        | j                  |_        |j                         S )Nr   )r   r   r   r   r   sync_construct_request_headers)r    bases     r"   _construct_headerszGCSCache._construct_headers&   s=    )9)9:)-)B)B&++2244r#   c                 <   	 t        d| d|        | j                         }| j                  |z   }| j                  }d| d| }t	        j
                  |      }| j                  j                  |||       y # t        $ r}	t        d|	        Y d }	~	y d }	~	ww xY w)NzLiteLLM SET Cache - GCS. Key=z. Value=3https://storage.googleapis.com/upload/storage/v1/b//o?uploadType=media&name=urldataheadersz3GCS Caching: set_cache() - Got exception from GCS: )	r   r'   r   r   jsondumpsr   post	Exception
r    keyvaluekwargsr.   object_namer   r,   r-   es
             r"   	set_cachezGCSCache.set_cache,   s    		U9#hugNO--/G//C/K**KG}Tmnymz{C::e$D!!cg!F 	UOPQsSTT	Us   A7A: :	BBBc                 6  K   	 | j                         }| j                  |z   }| j                  }d| d| }t        j                  |      }| j
                  j                  |||       d {    y 7 # t        $ r}	t        d|	        Y d }	~	y d }	~	ww xY ww)Nr)   r*   r+   z9GCS Caching: async_set_cache() - Got exception from GCS: )	r'   r   r   r/   r0   r   r1   r2   r   r3   s
             r"   async_set_cachezGCSCache.async_set_cache8   s     
	--/G//C/K**KG}Tmnymz{C::e$D##((StW(MMM 	KA3O 	sA   BA)A5 -A3.A5 2B3A5 5	B>BBBBc           
         	 | j                         }| j                  |z   }| j                  }d| d| d}| j                  j	                  ||      }|j
                  dk(  rHt        j                  |j                        }t        j                  d| d| dt        |              |S y # t        $ r"}	t        j                  d	|	        Y d }	~	y d }	~	ww xY w)
N,https://storage.googleapis.com/storage/v1/b//o/
?alt=mediar,   r.      zGot GCS Cache: key: z, cached_response z. Type Response z3GCS Caching: get_cache() - Got exception from GCS: )r'   r   r   r   getstatus_coder/   loadstextr   debugtyper2   error)
r    r4   r6   r.   r7   r   r,   responsecached_responser8   s
             r"   	get_cachezGCSCache.get_cacheE   s    	--/G//C/K**K@SQ\P]]ghC''++W+EH##s*"&**X]]";$$*3%/A/ARRbcghwcxbyz '& 	  EaSI 	s   B'B+ +	C4CCc                 |  K   	 | j                         }| j                  |z   }| j                  }d| d| d}| j                  j	                  ||       d {   }|j
                  dk(  rt        j                  |j                        S y 7 3# t        $ r"}t        j                  d|        Y d }~y d }~ww xY ww)Nr=   r>   r?   r@   rA   z9GCS Caching: async_get_cache() - Got exception from GCS: )r'   r   r   r   rB   rC   r/   rD   rE   r2   r   rH   )	r    r4   r6   r.   r7   r   r,   rI   r8   s	            r"   async_get_cachezGCSCache.async_get_cacheX   s     	--/G//C/K**K@SQ\P]]ghC!..22sG2LLH##s*zz(--00 M  	  KA3O 	sA   B<AB B1B 
B<B 	B9B4/B<4B99B<c                      y N r    s    r"   flush_cachezGCSCache.flush_cacheg   s    r#   c                    K   y wrO   rP   rQ   s    r"   
disconnectzGCSCache.disconnectj   s	     s   c                    K   g }|D ]+  }|j                   | j                  |d   |d   fi |       - t        j                  |  d {    y 7 w)Nr   r
   )appendr;   asynciogather)r    
cache_listr6   tasksvals        r"   async_set_cache_pipelinez!GCSCache.async_set_cache_pipelinem   sW      	ICLL---c!fc!fGGH	Inne$$$s   AA
AA)NNN)__name__
__module____qualname__r   strr   dictr'   r9   r;   rK   rM   rR   rT   r\   __classcell__)r!   s   @r"   r   r      su     &*.2"&	/c]/ 'sm/ 3-	/
 
/&5D 5
U&%r#   r   )__doc__r/   rW   typingr   litellm._loggingr   r   /litellm.integrations.gcs_bucket.gcs_bucket_baser   &litellm.llms.custom_httpx.http_handlerr   r   r	   
base_cacher   r   rP   r#   r"   <module>ri      s8       : I 
 "_%y _%r#   