
    h                         d Z ddlmZmZmZmZmZ ddlmZ er ddl	m
Z ddlmZmZ ddlmZ eZeZeeef   Z
neZeZeZ
 G d de      Zy	)
z
Redis Cluster Cache implementation

Key differences:
- RedisClient NEEDs to be re-used across requests, adds 3000ms latency if it's re-created
    )TYPE_CHECKINGAnyListOptionalUnion)
RedisCache)Span)RedisRedisCluster)Pipelinec                   \     e Zd Z fdZd Zdee   dee   fdZdee   dee   fdZ	 xZ
S )RedisClusterCachec                 @    t        |   |i | d | _        d | _        y )N)super__init__ redis_async_redis_cluster_clientredis_sync_redis_cluster_client)selfargskwargs	__class__s      _/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/caching/redis_cluster_cache.pyr   zRedisClusterCache.__init__   s%    $)&)HL-GK,    c                     ddl m} ddlm} | j                  r| j                  S  |dd| j
                  i| j                  }t        ||      r|| _        |S )Nr   )r      )get_redis_async_clientconnection_pool )redis.asyncior   _redisr   r   async_redis_conn_poolredis_kwargs
isinstance)r   r   r   _redis_clients       r   init_async_clientz#RedisClusterCache.init_async_client    s]    .300888. 
 66
:>:K:K
 m\24AD1r   keysreturnc                 :    | j                   j                  |      S )zI
        Overrides `_run_redis_mget_operation` in redis_cache.py
        r&   )redis_clientmget_nonatomic)r   r&   s     r   _run_redis_mget_operationz+RedisClusterCache._run_redis_mget_operation0   s       //T/::r   c                 b   K   | j                         }|j                  |       d{   S 7 w)zO
        Overrides `_async_run_redis_mget_operation` in redis_cache.py
        r)   N)r%   r+   )r   r&   async_redis_cluster_clients      r   _async_run_redis_mget_operationz1RedisClusterCache._async_run_redis_mget_operation6   s1      &*%;%;%="/>>D>IIIIs   &/-/)__name__
__module____qualname__r   r%   r   strr   r,   r/   __classcell__)r   s   @r   r   r      sG    L
 ;d3i ;DI ;J$s) JS	 Jr   r   N)__doc__typingr   r   r   r   r   litellm.caching.redis_cacher   opentelemetry.tracer	   _Spanr   r
   r   redis.asyncio.clientr   pipelineasync_redis_clientr   r   r   r   <module>r=      sX    = < 211-HDHD!J
 !Jr   