(redis fix) - fix AbstractConnection.__init__() got an unexpected keyword argument 'ssl' (#6908)

* add better debugging for get_redis_connection_pool + allow passing ssl=None

* test_redis_with_ssl

* test_redis_with_ssl

* test_redis_with_ssl
This commit is contained in:
Ishaan Jaff 2024-11-25 22:52:44 -08:00 committed by GitHub
parent 552c0dd7a4
commit 5c854650c2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 28 additions and 1 deletions

View file

@ -313,12 +313,13 @@ def get_redis_async_client(**env_overrides) -> async_redis.Redis:
def get_redis_connection_pool(**env_overrides):
redis_kwargs = _get_redis_client_logic(**env_overrides)
verbose_logger.debug("get_redis_connection_pool: redis_kwargs", redis_kwargs)
if "url" in redis_kwargs and redis_kwargs["url"] is not None:
return async_redis.BlockingConnectionPool.from_url(
timeout=5, url=redis_kwargs["url"]
)
connection_class = async_redis.Connection
if "ssl" in redis_kwargs and redis_kwargs["ssl"] is not None:
if "ssl" in redis_kwargs:
connection_class = async_redis.SSLConnection
redis_kwargs.pop("ssl", None)
redis_kwargs["connection_class"] = connection_class

View file

@ -99,3 +99,29 @@ def test_caching_router():
# test_caching_router()
@pytest.mark.asyncio
async def test_redis_with_ssl():
"""
Test connecting to redis connection pool when ssl=None
Relevant issue:
User was seeing this error: `TypeError: AbstractConnection.__init__() got an unexpected keyword argument 'ssl'`
"""
from litellm._redis import get_redis_connection_pool, get_redis_async_client
# Get the connection pool with SSL
# REDIS_HOST_WITH_SSL is just a redis cloud instance with Transport layer security (TLS) enabled
pool = get_redis_connection_pool(
host=os.environ.get("REDIS_HOST_WITH_SSL"),
port=os.environ.get("REDIS_PORT_WITH_SSL"),
password=os.environ.get("REDIS_PASSWORD_WITH_SSL"),
ssl=None,
)
# Create Redis client with the pool
redis_client = get_redis_async_client(connection_pool=pool)
print("pinging redis")
print(await redis_client.ping())
print("pinged redis")