Spaces:
Build error
Build error
File size: 1,477 Bytes
edda8af ad4369d edda8af ad4369d edda8af ad4369d edda8af ad4369d edda8af ae7bbe9 edda8af |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
from sqlmodel import Field, SQLModel, Relationship
from datetime import datetime, timezone
from typing import Optional, List, TYPE_CHECKING
import uuid
from sqlalchemy import Text
from enum import Enum
if TYPE_CHECKING:
from src.api.models.user import User
def utc_now() -> datetime:
return datetime.now(timezone.utc).replace(tzinfo=None)
class ChatMessageRole(str, Enum):
USER = "user"
ASSISTANT = "assistant"
SYSTEM = "system"
class ChatSession(SQLModel, table=True):
__tablename__ = "chat_sessions"
id: Optional[uuid.UUID] = Field(default_factory=uuid.uuid4, primary_key=True)
title: str = Field(nullable=False)
user_id: Optional[int] = Field(default=None, foreign_key="users.id", nullable=True)
user: Optional["User"] = Relationship(back_populates="sessions")
messages: List["ChatMessage"] = Relationship(back_populates="session", cascade_delete=True)
is_active: bool = Field(default=True)
created_at: datetime = Field(default_factory=utc_now)
updated_at: datetime = Field(default_factory=utc_now)
class ChatMessage(SQLModel, table=True):
__tablename__ = "chat_messages"
id: Optional[int] = Field(default=None, primary_key=True)
content: str = Field(sa_type=Text)
role: ChatMessageRole = Field(index=True)
timestamp: datetime = Field(default_factory=utc_now)
session_id: uuid.UUID = Field(foreign_key="chat_sessions.id")
session: ChatSession = Relationship(back_populates="messages") |