from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey from sqlalchemy.orm import relationship from datetime import datetime from .database import Base class ChatSession(Base): __tablename__ = 'chat_sessions' id = Column(Integer, primary_key=True, index=True) session_id = Column(String(64), unique=True, index=True, nullable=False) name = Column(String(100), default="New Chat", nullable=False) created_at = Column(DateTime, default=datetime.utcnow, nullable=False) messages = relationship("ChatMessage", back_populates="session") class ChatMessage(Base): __tablename__ = 'chat_messages' id = Column(Integer, primary_key=True, index=True) session_pk = Column(Integer, ForeignKey('chat_sessions.id'), nullable=False) role = Column(String(16), nullable=False) # 'user' | 'assistant' content = Column(Text, nullable=False) # JSON-encoded list of citation URLs; null/empty => no chips sources_json = Column(Text, nullable=True, default='[]') # JSON-encoded list of inline image attachments for user messages. attachments_json = Column(Text, nullable=True, default='[]') created_at = Column(DateTime, default=datetime.utcnow, nullable=False) session = relationship("ChatSession", back_populates="messages")