Update models/chat.py
Browse files- models/chat.py +34 -0
models/chat.py
CHANGED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from sqlmodel import SQLModel, Field, Relationship
|
2 |
+
from typing import Optional, List
|
3 |
+
from datetime import datetime
|
4 |
+
|
5 |
+
class ChatSessionBase(SQLModel):
|
6 |
+
user_id: int = Field(foreign_key="user.id")
|
7 |
+
start_time: datetime = Field(default_factory=datetime.utcnow)
|
8 |
+
title: Optional[str] = None # e.g., "Consultation on 2023-10-26"
|
9 |
+
|
10 |
+
class ChatSession(ChatSessionBase, table=True):
|
11 |
+
id: Optional[int] = Field(default=None, primary_key=True)
|
12 |
+
|
13 |
+
user: Optional["User"] = Relationship(back_populates="chat_sessions") # Define in User model
|
14 |
+
messages: List["ChatMessage"] = Relationship(back_populates="session")
|
15 |
+
|
16 |
+
# Add to User model in user.py:
|
17 |
+
# chat_sessions: List["ChatSession"] = Relationship(back_populates="user")
|
18 |
+
|
19 |
+
|
20 |
+
class ChatMessageBase(SQLModel):
|
21 |
+
session_id: int = Field(foreign_key="chatsession.id")
|
22 |
+
role: str # "user", "assistant", "system", "tool"
|
23 |
+
content: str
|
24 |
+
timestamp: datetime = Field(default_factory=datetime.utcnow)
|
25 |
+
tool_call_id: Optional[str] = None # For tool messages
|
26 |
+
tool_name: Optional[str] = None # For tool messages
|
27 |
+
|
28 |
+
|
29 |
+
class ChatMessage(ChatMessageBase, table=True):
|
30 |
+
id: Optional[int] = Field(default=None, primary_key=True)
|
31 |
+
session: Optional[ChatSession] = Relationship(back_populates="messages")
|
32 |
+
|
33 |
+
class ChatMessageCreate(ChatMessageBase):
|
34 |
+
pass
|