Skip to content

openmemory: failed memory deletion with qdrant point vector_id as UUID #2891

@stev-tig

Description

@stev-tig

🐛 Describe the bug

Hit the problem when I'm using openmemory-mcp, trying to trigger delete memories
in the configuration, it's using qdrant as vector store.

error log as follows

openmemory-mcp    |                     INFO     Deleting memory with                    main.py:902
openmemory-mcp    |                              memory_id=UUID('15f0fe7f-8581-4ded-bdaf            
openmemory-mcp    |                              -60e0808b7b04')                                    
openmemory-mcp    |                     WARNING  Failed to delete memory           mcp_server.py:340
openmemory-mcp    |                              15f0fe7f-8581-4ded-bdaf-60e0808b7                  
openmemory-mcp    |                              b04 from vector store: 2                           
openmemory-mcp    |                              validation errors for                              
openmemory-mcp    |                              PointRequest                                       
openmemory-mcp    |                              ids.0.int                                          
openmemory-mcp    |                                Input should be a valid integer                  
openmemory-mcp    |                              [type=int_type,                                    
openmemory-mcp    |                              input_value=UUID('15f0fe7f-8581-4                  
openmemory-mcp    |                              ded-bdaf-60e0808b7b04'),                           
openmemory-mcp    |                              input_type=UUID]                                   
openmemory-mcp    |                                  For further information visit                  
openmemory-mcp    |                              https://errors.pydantic.dev/2.11/                  
openmemory-mcp    |                              v/int_type                                         
openmemory-mcp    |                              ids.0.str                                          
openmemory-mcp    |                                Input should be a valid string                   
openmemory-mcp    |                              [type=string_type,                                 
openmemory-mcp    |                              input_value=UUID('15f0fe7f-8581-4                  
openmemory-mcp    |                              ded-bdaf-60e0808b7b04'),                           
openmemory-mcp    |                              input_type=UUID]                                   
openmemory-mcp    |                                  For further information visit                  
openmemory-mcp    |                              https://errors.pydantic.dev/2.11/                  
openmemory-mcp    |                              v/string_type                                      

qdrant accepts id as int64 or UUID string, however when triggering _delete_memory in main.py, from the logs above it mentioned the input_value failed validation

from the stack trace main.py:902 it's probably in this section of code

    def _delete_memory(self, memory_id):
        logging.info(f"Deleting memory with {memory_id=}")
        existing_memory = self.vector_store.get(vector_id=memory_id)
        prev_value = existing_memory.payload["data"]
        self.vector_store.delete(vector_id=memory_id)
        self.db.add_history(
            memory_id,
            prev_value,
            None,
            "DELETE",
            actor_id=existing_memory.payload.get("actor_id"),
            role=existing_memory.payload.get("role"),
            is_deleted=1,
        )
        capture_event("mem0._delete_memory", self, {"memory_id": memory_id, "sync_type": "sync"})
        return memory_id

the line self.vector_store.delete(vector_id=memory_id) probably is triggering qdrant.py:154

    def delete(self, vector_id: int):
        """
        Delete a vector by ID.

        Args:
            vector_id (int): ID of the vector to delete.
        """
        self.client.delete(
            collection_name=self.collection_name,
            points_selector=PointIdsList(
                points=[vector_id],
            ),
        )

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