Update models/chat.py
Browse files- models/chat.py +12 -16
models/chat.py
CHANGED
@@ -1,42 +1,38 @@
|
|
|
|
1 |
from sqlmodel import SQLModel, Field, Relationship
|
2 |
-
from typing import Optional, List, TYPE_CHECKING # Ensure TYPE_CHECKING is imported
|
3 |
from datetime import datetime
|
4 |
|
5 |
-
# Forward reference for type hinting to avoid circular imports
|
6 |
if TYPE_CHECKING:
|
7 |
-
from .user import User
|
8 |
|
9 |
class ChatSessionBase(SQLModel):
|
10 |
-
user_id: int = Field(foreign_key="user.id")
|
11 |
start_time: datetime = Field(default_factory=datetime.utcnow)
|
12 |
title: Optional[str] = None
|
|
|
|
|
|
|
|
|
13 |
|
14 |
class ChatSession(ChatSessionBase, table=True):
|
15 |
id: Optional[int] = Field(default=None, primary_key=True)
|
16 |
-
|
17 |
-
# ------------ RELATIONSHIP DEFINITION ------------
|
18 |
-
# A ChatSession belongs to one User.
|
19 |
-
# `back_populates="chat_sessions"` links this to the `chat_sessions` attribute in the User model.
|
20 |
user: Optional["User"] = Relationship(back_populates="chat_sessions")
|
21 |
-
|
22 |
-
# A ChatSession can have many ChatMessage objects.
|
23 |
messages: List["ChatMessage"] = Relationship(back_populates="session")
|
24 |
-
# -------------------------------------------------
|
25 |
|
26 |
class ChatMessageBase(SQLModel):
|
27 |
-
# Foreign key to the 'chatsession' table's 'id' column.
|
28 |
-
# SQLModel infers table names from class names (lowercase).
|
29 |
session_id: int = Field(foreign_key="chatsession.id")
|
30 |
-
role: str
|
31 |
content: str
|
32 |
timestamp: datetime = Field(default_factory=datetime.utcnow)
|
33 |
tool_call_id: Optional[str] = None
|
34 |
tool_name: Optional[str] = None
|
|
|
|
|
|
|
35 |
|
36 |
class ChatMessage(ChatMessageBase, table=True):
|
37 |
id: Optional[int] = Field(default=None, primary_key=True)
|
38 |
-
|
39 |
-
# A ChatMessage belongs to one ChatSession.
|
40 |
session: Optional["ChatSession"] = Relationship(back_populates="messages")
|
41 |
|
42 |
class ChatMessageCreate(ChatMessageBase):
|
|
|
1 |
+
# /home/user/app/models/chat.py
|
2 |
from sqlmodel import SQLModel, Field, Relationship
|
3 |
+
from typing import Optional, List, TYPE_CHECKING, Dict, Any # Ensure TYPE_CHECKING is imported
|
4 |
from datetime import datetime
|
5 |
|
|
|
6 |
if TYPE_CHECKING:
|
7 |
+
from .user import User
|
8 |
|
9 |
class ChatSessionBase(SQLModel):
|
10 |
+
user_id: int = Field(foreign_key="user.id")
|
11 |
start_time: datetime = Field(default_factory=datetime.utcnow)
|
12 |
title: Optional[str] = None
|
13 |
+
# NEW: For storing initial context provided by the clinician
|
14 |
+
patient_context_summary: Optional[str] = Field(default=None, description="Brief summary of patient context for this session")
|
15 |
+
# NEW: Could store structured context as JSON if more detail is needed
|
16 |
+
# patient_context_structured: Optional[Dict[str, Any]] = Field(default=None, sa_column=Column(JSON)) # If using SQLAlchemy Column for JSON
|
17 |
|
18 |
class ChatSession(ChatSessionBase, table=True):
|
19 |
id: Optional[int] = Field(default=None, primary_key=True)
|
|
|
|
|
|
|
|
|
20 |
user: Optional["User"] = Relationship(back_populates="chat_sessions")
|
|
|
|
|
21 |
messages: List["ChatMessage"] = Relationship(back_populates="session")
|
|
|
22 |
|
23 |
class ChatMessageBase(SQLModel):
|
|
|
|
|
24 |
session_id: int = Field(foreign_key="chatsession.id")
|
25 |
+
role: str # "user", "assistant", "system", "tool"
|
26 |
content: str
|
27 |
timestamp: datetime = Field(default_factory=datetime.utcnow)
|
28 |
tool_call_id: Optional[str] = None
|
29 |
tool_name: Optional[str] = None
|
30 |
+
# NEW: For AI to optionally provide source/confidence
|
31 |
+
# source_references: Optional[List[str]] = Field(default=None, sa_column=Column(JSON)) # If using SQLAlchemy Column for JSON
|
32 |
+
# confidence_score: Optional[float] = None
|
33 |
|
34 |
class ChatMessage(ChatMessageBase, table=True):
|
35 |
id: Optional[int] = Field(default=None, primary_key=True)
|
|
|
|
|
36 |
session: Optional["ChatSession"] = Relationship(back_populates="messages")
|
37 |
|
38 |
class ChatMessageCreate(ChatMessageBase):
|