Files
Heimgeist/backend/models.py

30 lines
1.3 KiB
Python

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")