-
Notifications
You must be signed in to change notification settings - Fork 104
Description
Problem
Before PR #244
State events and conversational events were naturally separated by actorId:
# create_session used a prefixed actorId
create_event(actorId="session_my-session-id", payload=[{"blob": ...}])
# create_agent used a prefixed actorId
create_event(actorId="agent_my-agent-id", payload=[{"blob": ...}])
# create_message used the regular actorId
create_event(actorId="my-actor-id", payload=[{"conversational": ...}])So when list_messages called list_events with actorId="my-actor-id", it only got conversational events back. State events lived under different actorIds and were invisible to this query. max_results counted only
what mattered.
After PR #244
Everything now uses the same actorId, with metadata distinguishing state events:
# create_session — same actorId, metadata marks it as state
create_event(
actorId="my-actor-id", # ← same as messages now
metadata={"stateType": {"stringValue": "SESSION"}},
payload=[{"blob": ...}],
)
# create_agent — same actorId, metadata marks it as state
create_event(
actorId="my-actor-id", # ← same as messages now
metadata={"stateType": {"stringValue": "AGENT"}, "agentId": {"stringValue": "..."}},
payload=[{"blob": ...}],
)
# create_message — same actorId, no metadata
create_event(actorId="my-actor-id", payload=[{"conversational": ...}])Potential Issues
list_messages in session_manager.py fetches events without any metadata filter:
events = self.memory_client.list_events(
memory_id=self.config.memory_id,
actor_id=self.config.actor_id,
session_id=session_id,
max_results=max_results, # ← this now includes state events in the count
)Since all events share the same actorId now, this query returns both conversational AND state events. The API returned max_results events total, some of which were state events. Those get discarded by the converter, so the final list is shorter than what the caller asked for.
Concrete example
A session with 1 session state event, 2 agent state events, and 20 conversational messages. Customer calls list_messages(limit=10):
max_results= limit + offset = 10list_eventsreturns 10 events: 3 state + 7 conversationalevents_to_messagesdiscards the 3 state events → 7 messages- Customer gets 7 messages, expected 10
Customer does not get a pagination token, so they assume 7 is all that exists, and doesn't know there are more.
Acceptance Criteria
- customer should be given nextToken, or should always get maxResults exactly if more results exist.
- unit tests and/or integration verifying fix of the bug.