RedisSession fails on Redis Cluster: add_items/clear_session raise AttributeError ('ClusterPipeline' has no 'raise_first_error')
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- python, redis
- Domain
- backend, databases, distributed-systems
Research direction
Start with _write_items_attempt in src/agents/extensions/memory/redis_session.py and reproduce the failure using the provided Redis Cluster setup. Investigate how add_items and clear_session handle ClusterPipeline and the keys' cluster slots; the issue outlines alternative approaches but does not choose one. Done means both operations work with RedisCluster while preserving session writes and clearing.
Written by the indexing model from the issue text.
Description
Please read this first
- Have you read the docs? Yes
- Have you searched for related issues? Yes. #5202 moved
clear_sessioninto the same watched transaction; I found no issue covering Redis Cluster.
Describe the bug
RedisSession fails on a Redis Cluster client (redis.asyncio.cluster.RedisCluster). add_items (since 0.20) and clear_session (latest) raise AttributeError before any write lands, so a session backed by Redis Cluster cannot store history.
Two things combine:
_write_items_attempthooks pipeline internals that only the standaloneredis.asyncio.client.Pipelinehas: it wrapspipe.raise_first_errorandpipe.parse_responseand swapspipe.connection_pool(src/agents/extensions/memory/redis_session.py:483onmain). redis-py'sClusterPipelinehas neitherraise_first_errornorparse_response, and has per-node pools.- The write is a WATCH/MULTI transaction over
{prefix}:{id},{prefix}:{id}:messagesand{prefix}:{id}:counter, which don't share a hash tag, so they land in different cluster slots (e.g. 13192 vs 7329). Redis Cluster only runs a transaction within one slot, so adding the missing hooks would not be enough on its own.
Up to 0.14.5, add_items used a plain pipeline, which redis-py's cluster client splits per key, and it worked on a cluster.
Debug information
- Agents SDK version: 0.23.1 (latest release); same code on
main. First broken release we hit: 0.20.0 (0.14.5 works) - Related library versions: redis 8.1.0
- Python version: 3.12
- Operating system: macOS 15 (also seen on Linux in Kubernetes)
- Model and model provider: not involved (no model call)
- Does the issue reproduce with the latest Agents SDK release? Yes
- Does the issue occur consistently or intermittently? Consistently
Traceback (most recent call last):
...
File "agents/extensions/memory/redis_session.py", line 483, in _write_items_attempt
raise_first_error = pipe.raise_first_error
AttributeError: 'ClusterPipeline' object has no attribute 'raise_first_error'
Repro steps
Start a local 3-node cluster:
for p in 7101 7102 7103; do redis-server --port $p --cluster-enabled yes --cluster-config-file nodes-$p.conf --daemonize yes --save ""; done
redis-cli --cluster create 127.0.0.1:7101 127.0.0.1:7102 127.0.0.1:7103 --cluster-replicas 0
import asyncio
from redis.asyncio.cluster import RedisCluster
from agents.extensions.memory.redis_session import RedisSession
async def main() -> None:
client = RedisCluster(host="127.0.0.1", port=7101)
session = RedisSession("s1", redis_client=client, key_prefix="repro")
await session.add_items([{"role": "user", "content": "hi"}]) # AttributeError
await session.clear_session() # AttributeError (latest)
asyncio.run(main())
On 0.23.1 against the cluster: add_items FAIL, clear_session FAIL, get_items OK, pop_item OK. On 0.14.5: all four OK.
Expected behavior
RedisSession works with RedisCluster, as it did through 0.14.5. Either hash-tag the session's keys into one slot and use a transaction path that ClusterPipeline supports, or fall back to a non-transactional pipeline when the client is a cluster. Our workaround meanwhile is a subclass that restores the 0.14.5 add_items.
- Dominant language
- Python
- Stars
- 30k
- Forks
- 4.9k
- Avg merge
- 18h 13m
- Merged PRs (30d)
- 215
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from openai/openai-agents-python
-
Difficulty 2/5 1-3 hours Newbie friendliness 77/100
openai/openai-agents-python#5348 · 2 comments ·
Maintainers usually reply within 1 day
-
Difficulty 5/5 Over a week Newbie friendliness 25/100
openai/openai-agents-python#5353 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 3/5 Half a day Newbie friendliness 70/100
openai/openai-agents-python#5342 · 3 comments ·
Maintainers usually reply within 1 day
-
enhancement
Difficulty 3/5 1-2 days Newbie friendliness 65/100
openai/openai-agents-python#5336 · 1 comment ·
Maintainers usually reply within 1 day
-
Finished tool call is dropped when a parallel tool's guardrail tripsPossibly taken @jbeckwith-oai claimed this 6 days ago. Open
Difficulty 4/5 3-5 days Newbie friendliness 35/100
openai/openai-agents-python#5327 · 1 comment ·
Maintainers usually reply within 1 day
All issues in openai/openai-agents-python
Similar issues
-
Atomic append fails to create a missing filePossibly taken @harbinresearcher claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
fabiocaccamo/python-fsutil#201 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
task
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
danparshall/claude_researcher#87 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
GhostManager/Ghostwriter#998 · 1 comment ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
datajoint/datajoint-python#1586 ·
Maintainers usually reply within 1 day