|
from sqlmodel import SQLModel, Field, Relationship |
|
from typing import Optional, List, TYPE_CHECKING |
|
from datetime import datetime |
|
|
|
|
|
if TYPE_CHECKING: |
|
from .user import User |
|
|
|
class ChatSessionBase(SQLModel): |
|
user_id: int = Field(foreign_key="user.id") |
|
start_time: datetime = Field(default_factory=datetime.utcnow) |
|
title: Optional[str] = None |
|
|
|
class ChatSession(ChatSessionBase, table=True): |
|
id: Optional[int] = Field(default=None, primary_key=True) |
|
|
|
|
|
|
|
|
|
user: Optional["User"] = Relationship(back_populates="chat_sessions") |
|
|
|
|
|
messages: List["ChatMessage"] = Relationship(back_populates="session") |
|
|
|
|
|
class ChatMessageBase(SQLModel): |
|
|
|
|
|
session_id: int = Field(foreign_key="chatsession.id") |
|
role: str |
|
content: str |
|
timestamp: datetime = Field(default_factory=datetime.utcnow) |
|
tool_call_id: Optional[str] = None |
|
tool_name: Optional[str] = None |
|
|
|
class ChatMessage(ChatMessageBase, table=True): |
|
id: Optional[int] = Field(default=None, primary_key=True) |
|
|
|
|
|
session: Optional["ChatSession"] = Relationship(back_populates="messages") |
|
|
|
class ChatMessageCreate(ChatMessageBase): |
|
pass |