30 lines
1.3 KiB
Python
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")
|