
    ^hy                     ^    S r SSKrSSKrSSKrSSKJr  SSKJrJr  SSK	J
r
   " S S\
5      rg)	z
S3 Cache implementation
WARNING: DO NOT USE THIS IN PRODUCTION - This is not ASYNC

Has 4 methods:
    - set_cache
    - get_cache
    - async_set_cache
    - async_get_cache
    N)Optional)print_verboseverbose_logger   )	BaseCachec                   j    \ rS rSr          SS\\   4S jjrS rS rS r	S r
S	 rS
 rS rSrg)S3Cache   N
s3_use_sslc                     SS K nXl        U(       a  UR                  S5      S-   OSU l        UR                  "  SUUUUUUUU	U
S.	UD6U l        g )Nr   / )	region_nameendpoint_urlapi_versionuse_sslverifyaws_access_key_idaws_secret_access_keyaws_session_tokenconfig)s3)boto3bucket_namerstrip
key_prefixclient	s3_client)selfs3_bucket_names3_region_names3_api_versionr   	s3_verifys3_endpoint_urls3_aws_access_key_ids3_aws_secret_access_keys3_aws_session_token	s3_configs3_pathkwargsr   s                 R/home/james-whalen/.local/lib/python3.13/site-packages/litellm/caching/s3_cache.py__init__S3Cache.__init__   se     	)7>'..-3B 
&(&2":2
 
    c                     [        SU SU 35        UR                  SS 5      n[        R                  " U5      nU R                  U-   nUbX  SU SU 3nSS KnUR
                  R                  5       U-   nU R                  R                  U R                  UUUUSSS	U S
3S9  g SnU R                  R                  U R                  UUUSSS	U S
3S9  g ! [         a  n	[        SU	 35         S n	A	g S n	A	ff = f)NzLiteLLM SET Cache - S3. Key=z. Value=ttlzimmutable, max-age=z, s-maxage=r   zapplication/jsonenzinline; filename="z.json")BucketKeyBodyExpiresCacheControlContentTypeContentLanguageContentDispositionz.immutable, max-age=31536000, s-maxage=31536000)r2   r3   r4   r6   r7   r8   r9   z1S3 Caching: set_cache() - Got exception from S3: )r   getjsondumpsr   datetimenowr   
put_objectr   	Exception)
r   keyvaluer*   r0   serialized_valuecache_controlr=   expiration_timees
             r+   	set_cacheS3Cache.set_cache:   s*   '	S8XeWMN**UD)C#zz%0//C'C"5cU+cU K #+"3"3"7"7"9C"? ))++)+!. 2$();C5'G * 	 !Q))++)!. 2$();C5'G *   	SMaSQRR	Ss   B"C %/C 
C7C22C7c                 4   #    U R                   " SXS.UD6  g 7f)N)rA   rB    )rG   )r   rA   rB   r*   s       r+   async_set_cacheS3Cache.async_set_cached   s     636v6s   c           
         SS K n U R                  U-   n[        SU 35        U R                  R	                  U R
                  US9nUb9  US   R                  5       R                  S5      n [        R                  " U5      n[        U5      [        La  [        U5      n[        R                   " SU SU S[        U5       35        U$ ! [         a    [        R                  " U5      n Nif = f! UR"                  R$                   a?  nUR&                  S	   S
   S:X  a  [        R                   " SU S35         S nAg  S nAg S nAf[         a#  n[        R(                  " SU 35         S nAg S nAff = f)Nr   zGet S3 Cache: key: )r2   r3   r4   zutf-8zGot S3 Cache: key: z, cached_response z. Type Response ErrorCode	NoSuchKeyzS3 Cache: The specified key 'z"' does not exist in the S3 bucket.z1S3 Caching: get_cache() - Got exception from S3: )botocorer   r   r   
get_objectr   readdecoder;   loadsr@   astliteral_evaltypedictr   debug
exceptionsClientErrorresponseerror)r   rA   r*   rQ   cached_responserF   s         r+   	get_cacheS3Cache.get_cacheg   s   &	//C'C/u56"nn77''S 8 O * $F+00299'B  H&*jj''O
 O$D0"&"7  %cU*<_<MM]^bcr^s]tu #" ! H&)&6&6&GOH "".. 	zz'"6*k9$$3C58Z[ 	 :  	  CA3G 	sI   A&C0 -C
 AC0 
 C-*C0 ,C--C0 0E4
0EE4E//E4c                 2   #    U R                   " SSU0UD6$ 7f)NrA   rJ   )r`   )r   rA   r*   s      r+   async_get_cacheS3Cache.async_get_cache   s     ~~0#000s   c                     g NrJ   r   s    r+   flush_cacheS3Cache.flush_cache   s    r.   c                    #    g 7frf   rJ   rg   s    r+   
disconnectS3Cache.disconnect   s     s   c                    #    / nU H,  nUR                  U R                  " US   US   40 UD65        M.     [        R                  " U6 I S h  vN   g  N7f)Nr   r   )appendrK   asynciogather)r   
cache_listr*   tasksvals        r+   async_set_cache_pipeline S3Cache.async_set_cache_pipeline   sL     CLL--c!fc!fGGH nne$$$s   AAAA)r   r   r   )
NNTNNNNNNN)__name__
__module____qualname____firstlineno__r   boolr,   rG   rK   r`   rc   rh   rk   rt   __static_attributes__rJ   r.   r+   r	   r	      s\     %)!!%!!

 TN!
F(ST7)V1%r.   r	   )__doc__rV   ro   r;   typingr   litellm._loggingr   r   
base_cacher   r	   rJ   r.   r+   <module>r      s,   	     : !I%i I%r.   