Source code for kerb.memory.classes

"""Data classes for memory management.

This module provides core data structures for conversation memory:
- Entity: Represents an extracted entity with metadata
- ConversationSummary: Represents a conversation summary
"""

from dataclasses import asdict, dataclass, field
from datetime import datetime
from typing import Any, Dict, List, Optional


[docs] @dataclass class Entity: """Represents an extracted entity with metadata.""" name: str type: str mentions: int = 1 first_seen: Optional[str] = None last_seen: Optional[str] = None context: List[str] = field(default_factory=list) metadata: Dict[str, Any] = field(default_factory=dict) def __post_init__(self): if self.first_seen is None: self.first_seen = datetime.now().isoformat() if self.last_seen is None: self.last_seen = self.first_seen
[docs] def to_dict(self) -> Dict[str, Any]: """Convert entity to dictionary.""" return asdict(self)
[docs] @classmethod def from_dict(cls, data: Dict[str, Any]) -> "Entity": """Create entity from dictionary.""" return cls(**data)
def __repr__(self) -> str: return ( f"Entity(name='{self.name}', type='{self.type}', mentions={self.mentions})" )
[docs] @dataclass class ConversationSummary: """Represents a summary of conversation history.""" summary: str message_count: int start_time: str end_time: str key_points: List[str] = field(default_factory=list) entities: List[str] = field(default_factory=list) metadata: Dict[str, Any] = field(default_factory=dict)
[docs] def to_dict(self) -> Dict[str, Any]: """Convert summary to dictionary.""" return asdict(self)
[docs] @classmethod def from_dict(cls, data: Dict[str, Any]) -> "ConversationSummary": """Create summary from dictionary.""" return cls(**data)