diff --git a/mem0/client/main.py b/mem0/client/main.py index aba36dbd7..19ff3722c 100644 --- a/mem0/client/main.py +++ b/mem0/client/main.py @@ -265,12 +265,17 @@ class MemoryClient: ) -> Dict[str, Any]: """ Update a memory by ID. + Args: memory_id (str): Memory ID. - text (str, optional): Data to update in the memory. + text (str, optional): New content to update the memory with. metadata (dict, optional): Metadata to update in the memory. + Returns: Dict[str, Any]: The response from the server. + + Example: + >>> client.update(memory_id="mem_123", text="Likes to play tennis on weekends") """ if text is None and metadata is None: raise ValueError("Either text or metadata must be provided for update.") @@ -1054,13 +1059,18 @@ class AsyncMemoryClient: self, memory_id: str, text: Optional[str] = None, metadata: Optional[Dict[str, Any]] = None ) -> Dict[str, Any]: """ - Update a memory by ID. + Update a memory by ID asynchronously. + Args: memory_id (str): Memory ID. - text (str, optional): Data to update in the memory. + text (str, optional): New content to update the memory with. metadata (dict, optional): Metadata to update in the memory. + Returns: Dict[str, Any]: The response from the server. + + Example: + >>> await client.update(memory_id="mem_123", text="Likes to play tennis on weekends") """ if text is None and metadata is None: raise ValueError("Either text or metadata must be provided for update.") diff --git a/mem0/memory/base.py b/mem0/memory/base.py index 2db4d8ec1..054bf7199 100644 --- a/mem0/memory/base.py +++ b/mem0/memory/base.py @@ -32,10 +32,10 @@ class MemoryBase(ABC): Args: memory_id (str): ID of the memory to update. - data (dict): Data to update the memory with. + data (str): New content to update the memory with. Returns: - dict: Updated memory. + dict: Success message indicating the memory was updated. """ pass diff --git a/mem0/memory/main.py b/mem0/memory/main.py index 71aa83d6a..52acb6ce4 100644 --- a/mem0/memory/main.py +++ b/mem0/memory/main.py @@ -730,10 +730,14 @@ class Memory(MemoryBase): Args: memory_id (str): ID of the memory to update. - data (dict): Data to update the memory with. + data (str): New content to update the memory with. Returns: - dict: Updated memory. + dict: Success message indicating the memory was updated. + + Example: + >>> m.update(memory_id="mem_123", data="Likes to play tennis on weekends") + {'message': 'Memory updated successfully!'} """ capture_event("mem0.update", self, {"memory_id": memory_id, "sync_type": "sync"}) @@ -994,6 +998,15 @@ class AsyncMemory(MemoryBase): else: self.graph = None + self.config.vector_store.config.collection_name = "mem0migrations" + if self.config.vector_store.provider in ["faiss", "qdrant"]: + provider_path = f"migrations_{self.config.vector_store.provider}" + self.config.vector_store.config.path = os.path.join(mem0_dir, provider_path) + os.makedirs(self.config.vector_store.config.path, exist_ok=True) + self._telemetry_vector_store = VectorStoreFactory.create( + self.config.vector_store.provider, self.config.vector_store.config + ) + capture_event("mem0.init", self, {"sync_type": "async"}) @classmethod @@ -1580,10 +1593,14 @@ class AsyncMemory(MemoryBase): Args: memory_id (str): ID of the memory to update. - data (dict): Data to update the memory with. + data (str): New content to update the memory with. Returns: - dict: Updated memory. + dict: Success message indicating the memory was updated. + + Example: + >>> await m.update(memory_id="mem_123", data="Likes to play tennis on weekends") + {'message': 'Memory updated successfully!'} """ capture_event("mem0.update", self, {"memory_id": memory_id, "sync_type": "async"}) diff --git a/mem0/proxy/main.py b/mem0/proxy/main.py index 7668bcea1..4baaf5ec2 100644 --- a/mem0/proxy/main.py +++ b/mem0/proxy/main.py @@ -11,16 +11,11 @@ import mem0 try: import litellm except ImportError: - user_input = input("The 'litellm' library is required. Install it now? [y/N]: ") - if user_input.lower() == "y": - try: - subprocess.check_call([sys.executable, "-m", "pip", "install", "litellm"]) - import litellm - except subprocess.CalledProcessError: - print("Failed to install 'litellm'. Please install it manually using 'pip install litellm'.") - sys.exit(1) - else: - raise ImportError("The required 'litellm' library is not installed.") + try: + subprocess.check_call([sys.executable, "-m", "pip", "install", "litellm"]) + import litellm + except subprocess.CalledProcessError: + print("Failed to install 'litellm'. Please install it manually using 'pip install litellm'.") sys.exit(1) from mem0 import Memory, MemoryClient diff --git a/pyproject.toml b/pyproject.toml index 944f8a682..323ccc0d7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,7 @@ requires-python = ">=3.9,<4.0" dependencies = [ "qdrant-client>=1.9.1", "pydantic>=2.7.3", - "openai>=1.33.0", + "openai>=1.90.0,<1.100.0", "posthog>=3.5.0", "pytz>=2024.1", "sqlalchemy>=2.0.31", @@ -46,7 +46,8 @@ vector_stores = [ llms = [ "groq>=0.3.0", "together>=0.2.10", - "litellm>=0.1.0", + "litellm>=1.74.0", + "openai>=1.90.0,<1.100.0", "ollama>=0.1.0", "vertexai>=0.1.0", "google-generativeai>=0.3.0", diff --git a/server/main.py b/server/main.py index 150ae590b..a9f4dfdc1 100644 --- a/server/main.py +++ b/server/main.py @@ -151,7 +151,15 @@ def search_memories(search_req: SearchRequest): @app.put("/memories/{memory_id}", summary="Update a memory") def update_memory(memory_id: str, updated_memory: Dict[str, Any]): - """Update an existing memory.""" + """Update an existing memory with new content. + + Args: + memory_id (str): ID of the memory to update + updated_memory (str): New content to update the memory with + + Returns: + dict: Success message indicating the memory was updated + """ try: return MEMORY_INSTANCE.update(memory_id=memory_id, data=updated_memory) except Exception as e: