42 lines
2.1 KiB
Python
42 lines
2.1 KiB
Python
from sqlalchemy import JSON, Boolean, Column, DateTime, ForeignKey, Integer, String, Text
|
|
from sqlalchemy.sql import func
|
|
|
|
from app.core.enums import PlaygroundMessageKind, PlaygroundMessageStatus
|
|
from app.db.session import Base
|
|
|
|
|
|
class PlaygroundMessage(Base):
|
|
__tablename__ = "playground_messages"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
public_id = Column(String(64), unique=True, index=True, nullable=False)
|
|
session_id = Column(Integer, ForeignKey("playground_sessions.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
parent_message_id = Column(Integer, ForeignKey("playground_messages.id", ondelete="SET NULL"), nullable=True)
|
|
role = Column(String(20), nullable=False)
|
|
kind = Column(String(20), nullable=False, default=PlaygroundMessageKind.MESSAGE.value)
|
|
status = Column(String(20), nullable=False, default=PlaygroundMessageStatus.DONE.value)
|
|
title = Column(String(255), nullable=True)
|
|
content = Column(Text, nullable=False, default="")
|
|
thinking_content = Column(Text, nullable=False, default="")
|
|
meta = Column(JSON, nullable=False, default=list)
|
|
provider = Column(String(100), nullable=True)
|
|
model = Column(String(200), nullable=True)
|
|
request_id = Column(String(100), nullable=True)
|
|
raw_response = Column(JSON, nullable=False, default=dict)
|
|
content_blocks = Column(JSON, nullable=False, default=list)
|
|
text_blocks = Column(JSON, nullable=False, default=list)
|
|
thinking_blocks = Column(JSON, nullable=False, default=list)
|
|
sort_order = Column(Integer, nullable=False, default=0, index=True)
|
|
is_visible = Column(Boolean, nullable=False, default=True)
|
|
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(),
|
|
nullable=False,
|
|
)
|
|
|
|
def __repr__(self):
|
|
return f"<PlaygroundMessage public_id={self.public_id} role={self.role} status={self.status}>"
|