o
    ưi                     @   sp   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
 d
eZdS )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                	       s   e Zd Zddee dee dee ddf fddZdefdd	Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Z  ZS )GCSCacheNbucket_namepath_service_accountgcs_pathreturnc                    s`   t    |ptd dj| _|ptd dj| _|r |dd nd| _t	t
jd| _t | _d S )Nr   / )Zllm_provider)super__init__r   BUCKET_NAMEr   path_service_account_jsonr   rstrip
key_prefixr   r   ZLoggingCallbackasync_clientr   sync_client)selfr   r   r   	__class__ P/home/app/Keep/.python/lib/python3.10/site-packages/litellm/caching/gcs_cache.pyr      s   
zGCSCache.__init__c                 C   s$   t | jd}| j|_| j|_| S )Nr   )r   r   r   r   r   Zsync_construct_request_headers)r   baser   r   r   _construct_headers   s   zGCSCache._construct_headersc           
   
   K   s   z/t d| d|  |  }| j| }| j}d| d| }t|}| jj|||d W d S  tyI }	 zt d|	  W Y d }	~	d S d }	~	w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&   er   r   r   	set_cache"   s   

zGCSCache.set_cachec           
   
      s   z(|   }| j| }| j}d| d| }t|}| jj|||dI d H  W d S  tyC }	 ztd|	  W Y d }	~	d S d }	~	ww )Nr"   r#   r$   z9GCS Caching: async_set_cache() - Got exception from GCS: )	r!   r   r   r(   r)   r   r*   r+   r   r,   r   r   r   async_set_cache.   s   

zGCSCache.async_set_cachec           
   
   K   s   z>|   }| j| }| j}d| d| d}| jj||d}|jdkr<t|j}t	
d| d| dt|  |W S W d S  tyY }	 zt	d	|	  W Y d }	~	d S d }	~	w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typer+   error)
r   r-   r/   r'   r0   r   r%   responsecached_responser1   r   r   r   	get_cache9   s"   

zGCSCache.get_cachec           	   
      s   z/|   }| j| }| j}d| d| d}| jj||dI d H }|jdkr.t|jW S W d S  t	yK } zt
d|  W Y d }~d S d }~ww )Nr4   r5   r6   r7   r8   z9GCS Caching: async_get_cache() - Got exception from GCS: )r!   r   r   r   r9   r:   r(   r;   r<   r+   r   r?   )	r   r-   r/   r'   r0   r   r%   r@   r1   r   r   r   async_get_cacheJ   s   

zGCSCache.async_get_cachec                 C   s   d S Nr   r   r   r   r   flush_cacheW   s   zGCSCache.flush_cachec                    s   d S rD   r   rE   r   r   r   
disconnectZ   s   zGCSCache.disconnectc                    sF   g }|D ]}| | j|d |d fi | qtj| I d H  d S )Nr   r	   )appendr3   asynciogather)r   Z
cache_listr/   tasksvalr   r   r   async_set_cache_pipeline]   s
   $z!GCSCache.async_set_cache_pipeline)NNN)__name__
__module____qualname__r   strr   dictr!   r2   r3   rB   rC   rF   rG   rM   __classcell__r   r   r   r   r      s    ,	r   )__doc__r(   rI   typingr   Zlitellm._loggingr   r   Z/litellm.integrations.gcs_bucket.gcs_bucket_baser   Z&litellm.llms.custom_httpx.http_handlerr   r   r   Z
base_cacher
   r   r   r   r   r   <module>   s    