
    gy                     ^    d Z ddl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
  G d de
      Zy)	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                   ^    e Zd Z	 	 	 	 	 	 	 	 	 	 ddee   fdZd Zd Zd Zd Z	d Z
d	 Zd
 Zy)S3CacheN
s3_use_sslc                     dd l }|| _        |r|j                  d      dz   nd| _         |j                  	 d||||||||	|
d	|| _        y )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                 M/var/www/openai/venv/lib/python3.12/site-packages/litellm/caching/s3_cache.py__init__zS3Cache.__init__   si     	)7>'..-3B &
&(&2":2
 
    c                    	 t        d| d|        |j                  dd       }t        j                  |      }| j                  |z   }|[d| d| }dd l}|j
                  j                         |z   }| j                  j                  | j                  ||||ddd	| d
       y d}| j                  j                  | j                  |||ddd	| d
       y # t        $ r}	t        d|	        Y d }	~	y d }	~	ww xY w)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)r0   r1   r2   r4   r5   r6   r7   z1S3 Caching: set_cache() - Got exception from S3: )r   getjsondumpsr   datetimenowr   
put_objectr   	Exception)
r   keyvaluer)   r.   serialized_valuecache_controlr;   expiration_timees
             r*   	set_cachez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 &2C 	C:"C55C:c                 6   K    | j                   d||d| y w)N)r?   r@    )rE   )r   r?   r@   r)   s       r*   async_set_cachezS3Cache.async_set_cached   s     63e6v6s   c           
         dd l }	 | j                  |z   }t        d|        | j                  j	                  | j
                  |      }|8|d   j                         j                  d      }	 t        j                  |      }t        |      t        urt        |      }t        j                   d| d| dt        |              |S # t        $ r t        j                  |      }Y ew xY w# |j"                  j$                  $ r=}|j&                  d	   d
   dk(  rt        j                   d| d       Y d }~y Y d }~y d }~wt        $ r"}t        j(                  d|        Y d }~y d }~ww xY w)Nr   zGet S3 Cache: key: )r0   r1   r2   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decoder9   loadsr>   astliteral_evaltypedictr   debug
exceptionsClientErrorresponseerror)r   r?   r)   rM   cached_responserD   s         r*   	get_cachez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(C- /C	 AC- 	C*'C- )C**C- -E,.D>>E,
E''E,c                 2   K    | j                   dd|i|S w)Nr?   rG   )r\   )r   r?   r)   s      r*   async_get_cachezS3Cache.async_get_cache   s     t~~0#000s   c                      y NrG   r   s    r*   flush_cachezS3Cache.flush_cache   s    r,   c                    K   y wr`   rG   ra   s    r*   
disconnectzS3Cache.disconnect   s	     s   c                    K   g }|D ]+  }|j                   | j                  |d   |d   fi |       - t        j                  |  d {    y 7 w)Nr   r   )appendrH   asynciogather)r   
cache_listr)   tasksvals        r*   async_set_cache_pipelinez S3Cache.async_set_cache_pipeline   sP     CLL---c!fc!fGGH nne$$$s   AA
AA)
NNTNNNNNNN)__name__
__module____qualname__r   boolr+   rE   rH   r\   r^   rb   rd   rl   rG   r,   r*   r	   r	      s\     %)!!%!!

 TN!
F(ST7)V1%r,   r	   )__doc__rR   rg   r9   typingr   litellm._loggingr   r   
base_cacher   r	   rG   r,   r*   <module>ru      s,   	     : !I%i I%r,   