diff --git a/pyproject.toml b/pyproject.toml index 25acb2a0d..2a0cd3786 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,7 +41,7 @@ litellm = ["litellm>=1.67.4.post1, <2"] realtime = ["websockets>=15.0, <16"] sqlalchemy = ["SQLAlchemy>=2.0", "asyncpg>=0.29.0"] encrypt = ["cryptography>=45.0, <46"] -redis = ["redis>=6.4.0"] +redis = ["redis>=7"] dapr = ["dapr>=1.16.0", "grpcio>=1.60.0"] [dependency-groups] diff --git a/src/agents/extensions/memory/redis_session.py b/src/agents/extensions/memory/redis_session.py index 68fd0351b..bb157f7b9 100644 --- a/src/agents/extensions/memory/redis_session.py +++ b/src/agents/extensions/memory/redis_session.py @@ -25,7 +25,6 @@ import json import time from typing import Any -from urllib.parse import urlparse try: import redis.asyncio as redis @@ -96,11 +95,6 @@ def from_url( """ redis_kwargs = redis_kwargs or {} - # Parse URL to determine if we need SSL - parsed = urlparse(url) - if parsed.scheme == "rediss": - redis_kwargs.setdefault("ssl", True) - redis_client = redis.from_url(url, **redis_kwargs) session = cls(session_id, redis_client=redis_client, **kwargs) session._owns_client = True # We created the client, so we own it @@ -261,7 +255,7 @@ async def ping(self) -> bool: True if Redis is reachable, False otherwise. """ try: - await self._redis.ping() + await self._redis.ping() # type: ignore[misc] # Redis library returns Union[Awaitable[T], T] in async context return True except Exception: return False diff --git a/tests/extensions/memory/test_redis_session.py b/tests/extensions/memory/test_redis_session.py index b513a28fc..fa7ea8692 100644 --- a/tests/extensions/memory/test_redis_session.py +++ b/tests/extensions/memory/test_redis_session.py @@ -492,14 +492,14 @@ async def test_external_client_not_closed(): assert len(items) == 1 # Verify client is working before close - assert await shared_client.ping() is True + assert await shared_client.ping() is True # type: ignore[misc] # Redis library returns Union[Awaitable[T], T] in async context # Close the session await session.close() # Verify the shared client is still usable after session.close() # This would fail if we incorrectly closed the external client - assert await shared_client.ping() is True + assert await shared_client.ping() is True # type: ignore[misc] # Redis library returns Union[Awaitable[T], T] in async context # Should still be able to use the client for other operations await shared_client.set("test_key", "test_value") @@ -781,7 +781,7 @@ async def test_close_method_coverage(): await session1.close() # Verify external client is still usable - assert await external_client.ping() is True + assert await external_client.ping() is True # type: ignore[misc] # Redis library returns Union[Awaitable[T], T] in async context # Test 2: Internal client (should be closed) # Create a session that owns its client diff --git a/uv.lock b/uv.lock index f4acc62b6..c21804e07 100644 --- a/uv.lock +++ b/uv.lock @@ -2107,7 +2107,7 @@ requires-dist = [ { name = "numpy", marker = "python_full_version >= '3.10' and extra == 'voice'", specifier = ">=2.2.0,<3" }, { name = "openai", specifier = ">=2.7.1,<3" }, { name = "pydantic", specifier = ">=2.12.3,<3" }, - { name = "redis", marker = "extra == 'redis'", specifier = ">=6.4.0" }, + { name = "redis", marker = "extra == 'redis'", specifier = ">=7" }, { name = "requests", specifier = ">=2.0,<3" }, { name = "sqlalchemy", marker = "extra == 'sqlalchemy'", specifier = ">=2.0" }, { name = "types-requests", specifier = ">=2.0,<3" }, @@ -2825,14 +2825,14 @@ wheels = [ [[package]] name = "redis" -version = "6.4.0" +version = "7.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "async-timeout", marker = "python_full_version < '3.11.3'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0d/d6/e8b92798a5bd67d659d51a18170e91c16ac3b59738d91894651ee255ed49/redis-6.4.0.tar.gz", hash = "sha256:b01bc7282b8444e28ec36b261df5375183bb47a07eb9c603f284e89cbc5ef010", size = 4647399, upload-time = "2025-08-07T08:10:11.441Z" } +sdist = { url = "https://files.pythonhosted.org/packages/57/8f/f125feec0b958e8d22c8f0b492b30b1991d9499a4315dfde466cf4289edc/redis-7.0.1.tar.gz", hash = "sha256:c949df947dca995dc68fdf5a7863950bf6df24f8d6022394585acc98e81624f1", size = 4755322, upload-time = "2025-10-27T14:34:00.33Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/02/89e2ed7e85db6c93dfa9e8f691c5087df4e3551ab39081a4d7c6d1f90e05/redis-6.4.0-py3-none-any.whl", hash = "sha256:f0544fa9604264e9464cdf4814e7d4830f74b165d52f2a330a760a88dd248b7f", size = 279847, upload-time = "2025-08-07T08:10:09.84Z" }, + { url = "https://files.pythonhosted.org/packages/e9/97/9f22a33c475cda519f20aba6babb340fb2f2254a02fb947816960d1e669a/redis-7.0.1-py3-none-any.whl", hash = "sha256:4977af3c7d67f8f0eb8b6fec0dafc9605db9343142f634041fb0235f67c0588a", size = 339938, upload-time = "2025-10-27T14:33:58.553Z" }, ] [[package]]