{"record":{"id":"70ef12c09a76690d","repo":"bytedance/deer-flow","slug":"clear-memory-not-supported-by-type-self-name","errorCode":null,"errorMessage":"clear_memory not supported by {type(self).__name__}","messagePattern":"clear_memory not supported by (.+?)","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"backend/packages/harness/deerflow/agents/memory/manager.py","lineNumber":315,"sourceCode":"    ) -> None:\n        \"\"\"Delete the entire memory document for the bucket. Default: unsupported\n        (dead contract -- zero callers).\"\"\"\n        raise NotImplementedError(f\"delete_memory not supported by {type(self).__name__}\")\n\n    def clear_memory(\n        self,\n        *,\n        user_id: str | None = None,\n        agent_name: str | None = None,\n    ) -> dict[str, Any]:\n        \"\"\"Clear the bucket's memory; return the cleared (now-empty) document.\n\n        ``agent_name=None`` means all memory owned by the user. An explicit\n        agent name clears only that agent's memory and must preserve shared\n        user-level summaries. Default: unsupported (raise\n        ``NotImplementedError``); backends that support clearing override.\n        \"\"\"\n        raise NotImplementedError(f\"clear_memory not supported by {type(self).__name__}\")\n\n    def import_memory(\n        self,\n        memory_data: dict[str, Any],\n        *,\n        user_id: str | None = None,\n        agent_name: str | None = None,\n    ) -> dict[str, Any]:\n        \"\"\"Import a memory document into the bucket; return the merged result.\n        Default: unsupported.\"\"\"\n        raise NotImplementedError(f\"import_memory not supported by {type(self).__name__}\")\n\n    def export_memory(\n        self,\n        *,\n        user_id: str | None = None,\n        agent_name: str | None = None,\n    ) -> dict[str, Any]:","sourceCodeStart":297,"sourceCodeEnd":333,"githubUrl":"https://github.com/bytedance/deer-flow/blob/1dd6ba1acb03700589994b0366c5d1c7d05e2eff/backend/packages/harness/deerflow/agents/memory/manager.py#L297-L333","documentation":"The base MemoryManager.clear_memory() raises NotImplementedError naming the backend class. Clearing a bucket's memory is an optional mutating capability that backends must override; the default refuses rather than pretending to clear, because a silent no-op would leave the user believing their memory was erased. Per the docstring, agent_name=None means all user-owned memory; an explicit agent clears only that bucket.","triggerScenarios":"Calling manager.clear_memory(user_id=..., agent_name=...) on a backend that does not override clear_memory — e.g. a custom minimal backend, or a remote adapter that intentionally exposes no destructive clear.","commonSituations":"'Delete my data' flows or admin tooling calling clear_memory() unconditionally across backends; test teardown code that clears memory after each test against a backend without clear support.","solutions":["Capability-check before calling: only invoke clear_memory when the backend overrides it (type(manager).clear_memory is not MemoryManager.clear_memory)","Use a backend that implements clear (e.g. DeerMem file storage) if destructive clear is a product requirement","In custom backends, override clear_memory() honoring the agent_name=None-means-all semantics (preserve shared user summaries on explicit-agent clears)"],"exampleFix":"# before\nmanager.clear_memory(user_id='default')\n\n# after\nis_overridden = type(manager).clear_memory is not MemoryManager.clear_memory\nif is_overridden:\n    manager.clear_memory(user_id='default')\nelse:\n    raise LookupError(f'{type(manager).__name__} does not support clearing memory')","handlingStrategy":"type-guard","validationCode":"from deerflow.agents.memory.manager import MemoryManager\nif type(manager).clear_memory is MemoryManager.clear_memory:\n    raise LookupError(f\"{type(manager).__name__} does not support clearing memory\")\nmanager.clear_memory(user_id=user, agent_name=agent_name)","typeGuard":"def backend_can_clear(manager) -> bool:\n    from deerflow.agents.memory.manager import MemoryManager\n    return type(manager).clear_memory is not MemoryManager.clear_memory","tryCatchPattern":"try:\n    manager.clear_memory(user_id=user)\nexcept NotImplementedError:\n    surface_ui_error(\"This memory backend does not support clearing\")  # never report success","preventionTips":["Gate 'delete memory' UI/actions on a clear-capability check so users never see a false success","In custom backends that cannot clear, leave the base NotImplementedError rather than adding a no-op override","Honor the agent_name=None-vs-explicit semantics when implementing clear in custom backends"],"tags":["memory","not-implemented","data-deletion","backend"],"backgroundTag":null,"analyzedSha":"1dd6ba1acb03700589994b0366c5d1c7d05e2eff","analyzedAt":"2026-08-14T21:20:34.804Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}