Skip to content

No way to delete memories from a MemoryService #6949

Description

@Chenjigaram

Is your feature request related to a specific problem?

BaseSessionService has delete_session and BaseArtifactService has delete_artifact, but BaseMemoryService only has add_session_to_memory, add_events_to_memory, add_memory and search_memory. Once something is written to memory there is no way to remove it through ADK.

This comes up when a user asks for their data to be deleted. Sessions and artifacts I can handle. Whatever was extracted into long-term memory I cannot, so I end up going around ADK and deleting straight from the backing store.

Most of the pieces are already there. MemoryEntry has an id field, and the Vertex API has projects.locations.reasoningEngines.memories.delete. VertexAiMemoryBankService just doesn't wrap it. It only uses memories.create, memories.generate and memories.ingest_events.

Describe the Solution You'd Like

Two methods on BaseMemoryService:

async def delete_memory(self, *, app_name: str, user_id: str, memory_id: str) -> None
async def delete_memories(self, *, app_name: str, user_id: str) -> None

First one deletes a single entry, second one everything stored for a user.

For VertexAiMemoryBankService both map onto memories.delete. InMemoryMemoryService keeps a dict so it's easy. Implementations that can't support it could raise NotImplementedError.

Impact on your work

I'm building agents for users in the EU, where a deletion request has to be answered within a month. Right now the memory part of that is a manual step outside ADK, and it's the part I can't show was actually done.

Willingness to contribute

Yes, happy to open a PR if you're OK with the method names and signatures.

Describe Alternatives You've Considered

Deleting from the backing store directly. It works but it's different for every implementation and bypasses ADK completely. The other option is not using MemoryService at all.

Version

google-adk 2.8.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions