From 9accc544e9887950509b3d72885d8000d47757a5 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 1 Apr 2024 16:51:23 -0700 Subject: [PATCH 1/3] add /cache/redis/info endpoint --- litellm/proxy/proxy_server.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 8b6fae40f2a..4c8e74e01f8 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -8069,6 +8069,41 @@ async def cache_ping(): ) +@router.get( + "/cache/redis/info", + tags=["caching"], + dependencies=[Depends(user_api_key_auth)], +) +async def cache_redis_info(): + """ + Endpoint for getting /redis/info + """ + try: + if litellm.cache is None: + raise HTTPException( + status_code=503, detail="Cache not initialized. litellm.cache is None" + ) + if litellm.cache.type == "redis": + client_list = litellm.cache.cache.client_list() + redis_info = litellm.cache.cache.info() + num_clients = len(client_list) + return { + "num_clients": num_clients, + "clients": client_list, + "info": redis_info, + } + else: + raise HTTPException( + status_code=500, + detail=f"Cache type {litellm.cache.type} does not support flushing", + ) + except Exception as e: + raise HTTPException( + status_code=503, + detail=f"Service Unhealthy ({str(e)})", + ) + + @router.post( "/cache/flushall", tags=["caching"], From 916e4032ee738f5c1516afc03d7ec31f1be6bc4c Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 1 Apr 2024 16:54:42 -0700 Subject: [PATCH 2/3] redis show client_list, info --- litellm/caching.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/litellm/caching.py b/litellm/caching.py index ded347c10d8..75c9f0d092e 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -338,6 +338,14 @@ class RedisCache(BaseCache): traceback.print_exc() raise e + def client_list(self): + client_list = self.redis_client.client_list() + return client_list + + def info(self): + info = self.redis_client.info() + return info + def flush_cache(self): self.redis_client.flushall() From 4ebb4570be37076e3eaacae56a4882072f45740c Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 1 Apr 2024 17:08:48 -0700 Subject: [PATCH 3/3] (fix) handle urls correctly --- litellm/caching.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/litellm/caching.py b/litellm/caching.py index 75c9f0d092e..301acd59385 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -109,6 +109,7 @@ class RedisCache(BaseCache): **kwargs, ): from ._redis import get_redis_client, get_redis_connection_pool + import redis redis_kwargs = {} if host is not None: @@ -122,6 +123,14 @@ class RedisCache(BaseCache): self.redis_client = get_redis_client(**redis_kwargs) self.redis_kwargs = redis_kwargs self.async_redis_conn_pool = get_redis_connection_pool(**redis_kwargs) + + if "url" in redis_kwargs and redis_kwargs["url"] is not None: + parsed_kwargs = redis.connection.parse_url(redis_kwargs["url"]) + redis_kwargs.update(parsed_kwargs) + self.redis_kwargs.update(parsed_kwargs) + # pop url + self.redis_kwargs.pop("url") + # redis namespaces self.namespace = namespace # for high traffic, we store the redis results in memory and then batch write to redis