o
    ưif                     @   sx   d dl Z d dlmZmZ d dlmZ d dlZd dlmZ d dl	m
Z
mZmZ d dlmZ d dlmZ G dd	 d	eZdS )
    N)LiteralOptional)HTTPException)verbose_proxy_logger)	DualCacheInMemoryCache
RedisCache)CustomLogger)UserAPIKeyAuthc                   @   s^   e Zd ZU dZee ed< dd Z	dded fdd	Z	d
e
dededefddZdd ZdS )_PROXY_BatchRedisRequestsNin_memory_cachec                 C   s   t jd ur| jt j_d S d S )N)litellmcacheasync_get_cache)self r   Z/home/app/Keep/.python/lib/python3.10/site-packages/litellm/proxy/hooks/batch_redis_get.py__init__   s   

z"_PROXY_BatchRedisRequests.__init__DEBUGdebug_level)INFOr   c                 C   s@   |dkr
t | n	|dkrt | tjdu rt| d S d S )Nr   r   T)r   debugr   Zset_verboseprint)r   Zprint_statementr   r   r   r   print_verbose   s   

z'_PROXY_BatchRedisRequests.print_verboseuser_api_key_dictr   data	call_typec              
      s  z	 |j }d| d| }|j| _i }d}|jj D ]}	t|	tr*|	|r*d}q|du rqtjd urq	 tjj	d urqttjjt
rqg }
| d|  tjjj|ddI d H }
| d|
  t|
d	krqtjjj|
d
I d H }t| d	kr|jjt| ddI d H  ||d d< W d S  ty } z|d }~w ty } ztdt| tt  W Y d }~d S d }~ww )Nzlitellm::FTzcache_key_name: d   )patterncountzredis keys: r   )Zkey_list<   )Z
cache_listttlmetadataZredis_namespacezUlitellm.proxy.hooks.batch_redis_get.py::async_pre_call_hook(): Exception occured - {})api_keyr   Z
cache_dictkeys
isinstancestr
startswithr   r   typer   r   Zasync_scan_iterlenZasync_batch_get_cacheitemsZasync_set_cache_pipelinelistr   	Exceptionr   errorformatr   	traceback
format_exc)r   r   r   r   r   r$   Zcache_key_nameZkey_value_dictZin_memory_cache_existskeyr%   er   r   r   async_pre_call_hook&   sZ   
z-_PROXY_BatchRedisRequests.async_pre_call_hookc                    s  z}d}d|v r|d }nt jdurt jj|i |}|durv| jduryt jdur||di }|d|dtd}| jj|g|R i |}|du rmt jjj|g|R i |I dH }|durm| jj||ddI dH  t jj	||d	W S W dS W dS W dS  t
y   Y dS w )
z
        - Check if the cache key is in-memory

        - Else:
            - add missing cache key from REDIS
            - update in-memory cache
            - return redis cache request
        N	cache_keyr   z	s-max-agezs-maxageinfr!   )r"   )cached_resultmax_age)r   r   Zget_cache_keyr   getfloatZ	get_cacher   Zasync_set_cacheZ_get_cache_logicr-   )r   argskwargsr5   Zcache_control_argsr8   r7   r   r   r   r   k   s\   	



z)_PROXY_BatchRedisRequests.async_get_cache)r   )__name__
__module____qualname__r   r   r   __annotations__r   r   r   r
   r   dictr'   r4   r   r   r   r   r   r      s"   
 


Er   )r0   typingr   r   Zfastapir   r   Zlitellm._loggingr   Zlitellm.caching.cachingr   r   r   Z"litellm.integrations.custom_loggerr	   Zlitellm.proxy._typesr
   r   r   r   r   r   <module>   s   