""" UserMemory model for storing long-term user memory across conversations """ from sqlalchemy import Column, String, Text, Numeric, DateTime, JSON, ForeignKey, UniqueConstraint from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from sqlalchemy.sql import func import uuid from app.database import Base class UserMemory(Base): """ UserMemory model for storing important user information across conversations This enables the bot to remember user preferences, frequently asked questions, and important context from previous interactions. """ __tablename__ = "user_memory" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, index=True) user_id = Column( UUID(as_uuid=True), ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True ) # Memory key-value pair memory_key = Column(String(255), nullable=False, index=True) # Category or topic memory_value = Column(Text, nullable=False) # Importance score (0.0 to 1.0) importance_score = Column(Numeric(3, 2), default=0.5, nullable=False) # Timestamps created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) last_accessed_at = Column(DateTime(timezone=True), server_default=func.now()) # JSON field for additional metadata meta_data = Column(JSON, default=dict, nullable=False) # Relationships user = relationship("User", back_populates="memories") # Constraints __table_args__ = ( UniqueConstraint("user_id", "memory_key", name="uq_user_memory_key"), ) def __repr__(self): return f""