
    ^hf                     ~    S SK r S SKJrJr  S SKJr  S SKrS SKJr  S SK	J
r
JrJr  S SKJr  S SKJr   " S S	\5      rg)
    N)LiteralOptional)HTTPException)verbose_proxy_logger)	DualCacheInMemoryCache
RedisCache)CustomLogger)UserAPIKeyAuthc                   j    \ rS rSr% Sr\\   \S'   S r SS\	S   4S jjr
S\S	\S
\S\4S jrS rSrg)_PROXY_BatchRedisRequests   Nin_memory_cachec                 f    [         R                  b   U R                  [         R                  l        g g )N)litellmcacheasync_get_cache)selfs    ]/home/james-whalen/.local/lib/python3.13/site-packages/litellm/proxy/hooks/batch_redis_get.py__init__"_PROXY_BatchRedisRequests.__init__   s&    ==$$$ MM) %    debug_level)INFODEBUGc                     US:X  a  [         R                  " U5        OUS:X  a  [         R                  " U5        [        R                  SL a  [	        U5        g g )Nr   r   T)r   debugr   set_verboseprint)r   print_statementr   s      r   print_verbose'_PROXY_BatchRedisRequests.print_verbose   sK     '! &&7F" &&7$&/" 'r   user_api_key_dictr   data	call_typec                   #      UR                   nSU SU 3nUR                  U l        0 nSnUR                  R                  R                  5        H4  n	[	        U	[
        5      (       d  M  U	R                  U5      (       d  M2  SnM6     USL a  [        R                  b   [        R                  R                  b  [	        [        R                  R                  [        5      (       a  / n
U R                  SU 35        [        R                  R                  R                  USS9I S h  vN n
U R                  SU
 35        [        U
5      S	:  a/  [        R                  R                  R                  U
S
9I S h  vN n[        UR                  5       5      S	:  a9  UR                  R!                  [#        UR                  5       5      SS9I S h  vN   XcS   S'   g  N Nd N! [$         a  nUeS nAf[&         aa  n[(        R*                  " SR-                  [        U5      5      5        [(        R.                  " [0        R2                  " 5       5         S nAg S nAff = f7f)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%   r1   cache_key_namekey_value_dictin_memory_cache_existskeyr3   es               r   async_pre_call_hook-_PROXY_BatchRedisRequests.async_pre_call_hook&   s.    <	? (//G'y)=N#(#8#8D N%*",,77<<>c3''CNN>,J,J-1* ? &.7==3L ==%%1jMM''7 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./)
  	G 	? &&gnnF
 !&&y';';'=>>	?s   I"A$G% ,G% B&G% *G+AG% <G!=AG% G#G% I"G% !G% #G% %
I/G11I>AII"II"c           	        #     SnSU;   a  US   nO1[         R                  b   [         R                  R                  " U0 UD6nUb  U R                  b  [         R                  b  UR	                  S0 5      nUR	                  SUR	                  S[        S5      5      5      nU R                  R                  " U/UQ70 UD6nUc[  [         R                  R                  R                  " U/UQ70 UD6I Sh  vN nUb"  U R                  R                  X6SS9I Sh  vN   [         R                  R                  XeS	9$ ggg NI N&! [         a     gf = f7f)
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kwargsrK   cache_control_argsrN   rM   s          r   r   )_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C1E 5D?6$E E E ;E?E E 
EEEE)r   )r   )__name__
__module____qualname____firstlineno__r   r   r   __annotations__r   r   r!   r   r   dictr5   rH   r   __static_attributes__ r   r   r   r      se    /3OXm,3 HO#,3O,D#C?)C? C? 	C?
 C?J*r   r   )rA   typingr   r   fastapir   r   litellm._loggingr   litellm.caching.cachingr   r   r	   "litellm.integrations.custom_loggerr
   litellm.proxy._typesr   r   r`   r   r   <module>rg      s0     $ !  1 H H ; /C Cr   