Files
crewAI/src/crewai/cli/reset_memories_command.py
Devin AI 849a779713 refactor: Add logging and improve error handling
- Add Logger class usage
- Add descriptive error messages
- Add edge case test for memory reset failure
- Add docstrings to RAGStorage methods

Co-Authored-By: Joe Moura <joao@crewai.com>
2025-02-13 19:34:42 +00:00

115 lines
3.7 KiB
Python

"""CLI command for resetting memory storage."""
import logging
import subprocess
import sys
from typing import Optional
import click
from crewai.cli.utils import get_crew
from crewai.knowledge.storage.knowledge_storage import KnowledgeStorage
from crewai.memory.entity.entity_memory import EntityMemory
from crewai.memory.long_term.long_term_memory import LongTermMemory
from crewai.memory.short_term.short_term_memory import ShortTermMemory
from crewai.utilities.task_output_storage_handler import TaskOutputStorageHandler
_logger = logging.getLogger(__name__)
def _log_error(message: str) -> None:
"""Log an error message."""
_logger.error(message)
click.echo(message, err=True)
def _reset_all_memories() -> None:
"""Reset all memory types."""
ShortTermMemory().reset()
EntityMemory().reset()
LongTermMemory().reset()
TaskOutputStorageHandler().reset()
KnowledgeStorage().reset()
@click.command()
@click.option("-l", "--long", is_flag=True, help="Reset long-term memory")
@click.option("-s", "--short", is_flag=True, help="Reset short-term memory")
@click.option("-e", "--entity", is_flag=True, help="Reset entity memory")
@click.option("--knowledge", is_flag=True, help="Reset knowledge")
@click.option("-k", "--kickoff-outputs", is_flag=True, help="Reset kickoff outputs")
@click.option("-a", "--all", is_flag=True, help="Reset all memories")
def reset_memories_command(
long: bool,
short: bool,
entity: bool,
knowledge: bool,
kickoff_outputs: bool,
all: bool,
) -> int:
"""
Reset the crew memories.
Args:
long: Reset long-term memory
short: Reset short-term memory
entity: Reset entity memory
knowledge: Reset knowledge
kickoff_outputs: Reset kickoff outputs
all: Reset all memories
"""
try:
crew = get_crew()
if all:
if crew:
crew.reset_memories(command_type="all")
else:
# When no crew exists, use default storage paths
_reset_all_memories()
click.echo("All memories have been reset.")
return 0
if not any([long, short, entity, kickoff_outputs, knowledge]):
click.echo(
"Please specify at least one memory type to reset using the appropriate flags."
)
return 0
if not crew:
click.echo("No crew found. Use --all to reset all memories.")
return 0
try:
if long:
crew.reset_memories(command_type="long")
click.echo("Long term memory has been reset.")
if short:
crew.reset_memories(command_type="short")
click.echo("Short term memory has been reset.")
if entity:
crew.reset_memories(command_type="entity")
click.echo("Entity memory has been reset.")
if kickoff_outputs:
crew.reset_memories(command_type="kickoff_outputs")
click.echo("Latest Kickoff outputs stored has been reset.")
if knowledge:
crew.reset_memories(command_type="knowledge")
click.echo("Knowledge has been reset.")
return 0
except Exception as e:
_log_error(f"An unexpected error occurred: {e}")
raise click.exceptions.Exit(code=1)
except subprocess.CalledProcessError as e:
_log_error(f"An error occurred while resetting the memories: {e}")
click.echo(e.output, err=True)
raise click.exceptions.Exit(code=1)
except Exception as e:
_log_error(f"An unexpected error occurred: {e}")
raise click.exceptions.Exit(code=1)