Ë
    tPêjï  ã                   ó~   — 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)ÚFinalÚLiteral)ÚHTTPException)Úverbose_proxy_logger)Ú	DualCacheÚInMemoryCacheÚ
RedisCache)ÚCustomLogger)ÚUserAPIKeyAuthc                   óZ   — e Zd ZU dZedz  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    úh/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/hooks/batch_redis_get.pyÚ__init__z"_PROXY_BatchRedisRequests.__init__   s&   € Ü�=‰=Ð$à×$Ñ$ô �M‰MÕ)ð %ó    Údebug_level)ÚINFOÚDEBUGc                 ó~   — |dk(  s|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   s:   € Ø˜'Ò! [°FÒ%:Ü ×&Ñ& Ô7Ü×Ñ $Ñ&Ü�/Õ"ð 'r   Úuser_api_key_dictr   ÚdataÚ	call_typec              ƒ   óX  K  — 	 	 |j                   }d|› d|› �}|j                  | _        i }d}|j                  j                  D ]'  }	t        |	t        «      sŒ|	j                  |«      sŒ&d}Œ) |du rðt        j                  �à	 t        j                  j                  �Åt        t        j                  j                  t        «      r�g }
| 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$        $ rG}t'        j(                  d|«       t'        j*                  t-        j.                  «       «       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 - %s)Úapi_keyr   Ú
cache_dictÚ
isinstanceÚstrÚ
startswithr   r   Útyper	   r   Úasync_scan_iterÚlenÚasync_batch_get_cacheÚitemsÚasync_set_cache_pipelineÚlistr   Ú	Exceptionr   Úerrorr   Ú	tracebackÚ
format_exc)r   r    r   r!   r"   r.   Úcache_key_nameÚkey_value_dictÚin_memory_cache_existsÚkeyÚkeysÚes               r   Úasync_pre_call_hookz-_PROXY_BatchRedisRequests.async_pre_call_hook"   sù  è ø€ ð0	?ðð /×6Ñ6ˆGà&.¨w¨i°q¸¸Ð$DˆNØ#(×#8Ñ#8ˆDÔ àˆNØ%*Ð"Ø×,Ñ,×7Ñ7ò 2�Ü˜c¤3Õ'¨C¯N©N¸>Õ,JØ-1Ñ*ð2ð &¨Ñ.´7·=±=Ð3Lðô —=‘=×%Ñ%Ð1´jÄÇÁ×ATÑATÔV`Ô6aà�DØ×&Ñ&Ð)9¸.Ð9IÐ'JÔKä!(§¡×!4Ñ!4×!DÑ!DÈ^ÐcfÐ!DÓ!g×g�Dð ×&Ñ&¨°d°VÐ'<Ô=Ü˜4“y 1’}Ü/6¯}©}×/BÑ/B×/XÑ/XÐbfÐ/XÓ/g×)g˜ô �>×'Ñ'Ó)Ó*¨QÒ.Ø×+Ñ+×DÑDÔPTÐUc×UiÑUiÓUkÓPlÐrtÐDÓu×uÐuà2@ˆD�ÑÐ.Ò/ð høð *høð vùô ò 	ØˆGûÜò 	?Ü ×&Ñ&ØgÐijôô !×&Ñ&¤y×';Ñ';Ó'=×>Ñ>ûð		?üs€   ‚H*„AG	 ÁG	 Á*BG	 Ä	GÄ
AG	 ÅGÅAG	 Æ5GÆ6G	 ÇH*ÇG	 ÇG	 ÇG	 Ç		H'ÇGÇH'Ç =H"ÈH*È"H'È'H*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ÚkwargsrF   Úcache_control_argsrI   rH   s          r   r   z)_PROXY_BatchRedisRequests.async_get_cache[   s]  è ø€ ð	Ø$(ˆIØ˜fÑ$Ø" ;Ñ/‘	Ü—‘Ð*Ü#ŸM™M×7Ñ7ØðØ#ñ�	ð Ð$¨×)=Ñ)=Ð)IÌgÏmÉmÐNgØ,2¯J©J°wÀÓ,CÐ"Ø!3×!7Ñ!7¸ÐEW×E[ÑE[Ð\fÔhmÐnsÓhtÓEuÓ!v�Ø > × 4Ñ 4× >Ñ >¸yÐ ZÈ4Ò ZÐSYÑ Z�Ø Ð(Ü*1¯-©-×*=Ñ*=×*MÑ*MÈiÐ*iÐZ^Ò*iÐbhÑ*i×$i�MØ$Ð0Ø"×2Ñ2×BÑBÀ9ÈmÐacÐBÓd×dÐdÜ—}‘}×5Ñ5ÀMÐ[bÐ5ÓcÐcð OhÐ)IÐ$ð
 %jøàdùäò 	Ùð	üsM   ‚E„C(E Ã,D=Ã-'E ÄD?Ä$E Ä9EÄ=E Ä?E Å	EÅ
EÅEÅE)r   )Ú__name__Ú
__module__Ú__qualname__r   r   Ú__annotations__r   r   r   r   r   Údictr1   rD   r   © r   r   r   r      sX   … à,0€O�] TÑ)Ó0òñ#¸'À/Ñ:Ró #ð7?à)ð7?ð ð7?ð ð	7?ð
 ó7?órr   r   )r<   Útypingr   r   Úfastapir   r   Úlitellm._loggingr   Úlitellm.caching.cachingr   r   r	   Ú"litellm.integrations.custom_loggerr
   Úlitellm.proxy._typesr   r   rX   r   r   ú<module>r_      s0   ðó ß !å !ã Ý 1ß HÑ HÝ ;Ý /ôe õ er   