diff --git a/src/bedrock_agentcore/memory/integrations/strands/session_manager.py b/src/bedrock_agentcore/memory/integrations/strands/session_manager.py index c4fe8540..8ff21e28 100644 --- a/src/bedrock_agentcore/memory/integrations/strands/session_manager.py +++ b/src/bedrock_agentcore/memory/integrations/strands/session_manager.py @@ -848,7 +848,10 @@ def retrieve_customer_context(self, event: MessageAddedEvent) -> None: event (MessageAddedEvent): The message added event containing the agent and message data. """ messages = event.agent.messages - if not messages or messages[-1].get("role") != "user" or "text" not in messages[-1].get("content")[0]: + if not messages or messages[-1].get("role") != "user": + return None + content = messages[-1].get("content") + if not content or "text" not in content[0]: return None if not self.config.retrieval_config: # Only retrieve LTM diff --git a/tests/bedrock_agentcore/memory/integrations/strands/test_agentcore_memory_session_manager.py b/tests/bedrock_agentcore/memory/integrations/strands/test_agentcore_memory_session_manager.py index 8e26a0a2..fc93984f 100644 --- a/tests/bedrock_agentcore/memory/integrations/strands/test_agentcore_memory_session_manager.py +++ b/tests/bedrock_agentcore/memory/integrations/strands/test_agentcore_memory_session_manager.py @@ -1169,6 +1169,31 @@ def test_retrieve_customer_context_no_messages(self, agentcore_config_with_retri result = manager.retrieve_customer_context(event) assert result is None + def test_retrieve_customer_context_empty_content(self, agentcore_config_with_retrieval, mock_memory_client): + """Empty content list on the last message must not raise IndexError.""" + with patch( + "bedrock_agentcore.memory.integrations.strands.session_manager.MemoryClient", + return_value=mock_memory_client, + ): + with patch("boto3.Session") as mock_boto_session: + mock_session = Mock() + mock_session.region_name = "us-west-2" + mock_session.client.return_value = Mock() + mock_boto_session.return_value = mock_session + + with patch( + "strands.session.repository_session_manager.RepositorySessionManager.__init__", return_value=None + ): + manager = AgentCoreMemorySessionManager(agentcore_config_with_retrieval) + + mock_agent = Mock() + mock_agent.messages = [{"role": "user", "content": []}] + + event = MessageAddedEvent(agent=mock_agent, message={"role": "user", "content": []}) + result = manager.retrieve_customer_context(event) + assert result is None + mock_memory_client.retrieve_memories.assert_not_called() + def test_retrieve_customer_context_no_config(self, agentcore_config, mock_memory_client): """Test retrieve_customer_context with no retrieval config.""" with patch(