Files
crewAI/src/crewai/memory/external/external_memory.py
2025-04-02 09:45:39 -03:00

57 lines
1.8 KiB
Python

from typing import Any, Dict, Optional
from crewai.memory.external.external_memory_item import ExternalMemoryItem
from crewai.memory.memory import Memory
from crewai.memory.storage.interface import Storage
class ExternalMemory(Memory):
def __init__(self, crew=None, embedder_config=None, storage=None):
storage = (
storage
if storage
else self._create_storage(crew=crew, embedder_config=embedder_config)
)
super().__init__(storage=storage)
@staticmethod
def _configure_mem0(crew, config) -> "Mem0Storage":
from crewai.memory.storage.mem0_storage import Mem0Storage
return Mem0Storage(type="external", crew=crew, config=config)
@property
def external_supported_storages(self):
return {
"mem0": self._configure_mem0,
}
def _create_storage(self, crew, embedder_config):
if not embedder_config:
return Storage()
if embedder_config and "provider" not in embedder_config:
raise ValueError("embedder_config must include a 'provider' key")
provider = embedder_config["provider"]
if provider not in self.external_supported_storages:
raise ValueError(f"Provider {provider} not supported")
return self.external_supported_storages[provider](
crew, embedder_config.get("config", {})
)
def save(
self,
value: Any,
metadata: Optional[Dict[str, Any]] = None,
agent: Optional[str] = None,
) -> None:
"""Saves a value into the external storage."""
item = ExternalMemoryItem(value=value, metadata=metadata, agent=agent)
super().save(value=item.value, metadata=item.metadata, agent=item.agent)
def reset(self) -> None:
self.storage.reset()