from sqlalchemy import Column, Integer, String, DateTime, Text, JSON, ForeignKey, Float from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship from datetime import datetime Base = declarative_base() class LongTermMemory(Base): __tablename__ = "long_term_memory" id = Column(Integer, primary_key=True) memory_id = Column(String(64), unique=True, nullable=False) agent_id = Column(String(64), nullable=False) key = Column(String(128), nullable=False) value = Column(JSON, nullable=False) importance = Column(Float, default=0.5) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) expires_at = Column(DateTime, nullable=True) class SessionMemory(Base): __tablename__ = "session_memory" id = Column(Integer, primary_key=True) session_id = Column(String(64), nullable=False) agent_id = Column(String(64), nullable=False) turn_number = Column(Integer, default=0) role = Column(String(32), nullable=False) content = Column(Text, nullable=False) meta = Column(JSON, default={}) # renamed from metadata created_at = Column(DateTime, default=datetime.utcnow) class WorkspaceMemory(Base): __tablename__ = "workspace_memory" id = Column(Integer, primary_key=True) workspace_id = Column(String(64), nullable=False) agent_id = Column(String(64), nullable=False) key = Column(String(128), nullable=False) value = Column(JSON, nullable=False) version = Column(Integer, default=1) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) class ConversationSummary(Base): __tablename__ = "conversation_summaries" id = Column(Integer, primary_key=True) session_id = Column(String(64), nullable=False) agent_id = Column(String(64), nullable=False) summary = Column(Text, nullable=False) start_turn = Column(Integer, default=0) end_turn = Column(Integer, default=0) created_at = Column(DateTime, default=datetime.utcnow)