
    gf                     ~    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	e      Zy)
    N)LiteralOptional)HTTPException)verbose_proxy_logger)	DualCacheInMemoryCache
RedisCache)CustomLogger)UserAPIKeyAuthc                   \    e Zd ZU dZee   ed<   d Z	 dded   fdZ	de
ded	ed
efdZd Zy)_PROXY_BatchRedisRequestsNin_memory_cachec                 d    t         j                   | j                  t         j                  _        y y )N)litellmcacheasync_get_cache)selfs    X/var/www/openai/venv/lib/python3.12/site-packages/litellm/proxy/hooks/batch_redis_get.py__init__z"_PROXY_BatchRedisRequests.__init__   s&    ==$$$ MM) %    debug_level)INFODEBUGc                     |dk(  rt        j                  |       n|dk(  rt        j                  |       t        j                  du rt	        |       y y )Nr   r   T)r   debugr   set_verboseprint)r   print_statementr   s      r   print_verbosez'_PROXY_BatchRedisRequests.print_verbose   sK     '! &&7F" &&7$&/" 'r   user_api_key_dictr   data	call_typec                   K   	 	 |j                   }d| d| }|j                  | _        i }d}|j                  j                  j                         D ]'  }	t	        |	t
              s|	j                  |      s&d}) |du rt        j                  	 t        j                  j                  t	        t        j                  j                  t              rg }
| j                  d|        t        j                  j                  j                  |d       d {   }
| j                  d|
        t        |
      d	kD  r2t        j                  j                  j                  |

       d {   }t        |j                               d	kD  r<|j                  j!                  t#        |j                               d       d {    ||d   d<   y 7 7 g7 # t$        $ r}|d }~wt&        $ r^}t)        j*                  dj-                  t        |                   t)        j.                  t1        j2                                Y d }~y d }~ww xY ww)Nzlitellm::FTzcache_key_name: d   )patterncountzredis keys: r   )key_list<   )
cache_listttlmetadataredis_namespacezUlitellm.proxy.hooks.batch_redis_get.py::async_pre_call_hook(): Exception occured - {})api_keyr   
cache_dictkeys
isinstancestr
startswithr   r   typer	   r   async_scan_iterlenasync_batch_get_cacheitemsasync_set_cache_pipelinelistr   	Exceptionr   errorformatr   	traceback
format_exc)r   r    r   r!   r"   r.   cache_key_namekey_value_dictin_memory_cache_existskeyr0   es               r   async_pre_call_hookz-_PROXY_BatchRedisRequests.async_pre_call_hook&   s(    <	? (//G'y)=N#(#8#8D N%*",,77<<>c3'CNN>,J-1* ? &.7==3L ==%%1jMM''7 D&&)9.9I'JK!(!4!4!D!D .c "E " D &&dV'<=4y1}")--"5"5"K"K)- #L #  ' >'')*Q.++DD#N$8$8$:; E    3AD./)
  	G 	? &&gnnF
 !&&y';';'=>>	?s   IA!G &G 8BG GAG +G,AG GG IG G G 	I G""I.AIIIIc           	        K   	 d}d|v r|d   }n/t         j                  t        j                  j                  |i |}|| j                  t         j                  |j	                  di       }|j	                  d|j	                  dt        d                  } | j                  j                  |g|i |}|]t        j                  j                  j                  |g|i | d{   }|&| j                  j                  ||d       d{    t         j                  j                  ||	      S yyy7 P7 *# t        $ r Y yw xY w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   get_cache_keyr   getfloat	get_cacher   async_set_cache_get_cache_logicr;   )r   argskwargsrG   cache_control_argsrJ   rI   s          r   r   z)_PROXY_BatchRedisRequests.async_get_cachek   s    !	'+If$";/	*#MM77#	
 %((4MM-%+ZZ%<",00!3!7!7
E%L!Q !? 4 4 > >! $!(.! !(*1--*=*=*M*M!+$(+,2+ %M %0"22BB%}" C    }}55"/ 6  # . 5 &%  		sM   EC(E ,D=-'E D?$E 9E=E ?E 	E
EEE)r   )__name__
__module____qualname__r   r   r   __annotations__r   r   r   r   r   dictr2   rE   r    r   r   r   r      se    /3OXm,3 HO#,3O,D#C?)C? C? 	C?
 C?J*r   r   )r>   typingr   r   fastapir   r   litellm._loggingr   litellm.caching.cachingr   r   r	   "litellm.integrations.custom_loggerr
   litellm.proxy._typesr   r   rY   r   r   <module>r`      s0     $ !  1 H H ; /C Cr   