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):
|