MedQA / models /chat.py
mgbam's picture
Update models/chat.py
a0dc6fc verified
# /home/user/app/models/chat.py
from sqlmodel import SQLModel, Field, Relationship
from typing import Optional, List, TYPE_CHECKING, Dict, Any # Ensure TYPE_CHECKING is imported
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
# NEW: For storing initial context provided by the clinician
patient_context_summary: Optional[str] = Field(default=None, description="Brief summary of patient context for this session")
# NEW: Could store structured context as JSON if more detail is needed
# patient_context_structured: Optional[Dict[str, Any]] = Field(default=None, sa_column=Column(JSON)) # If using SQLAlchemy Column for JSON
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 # "user", "assistant", "system", "tool"
content: str
timestamp: datetime = Field(default_factory=datetime.utcnow)
tool_call_id: Optional[str] = None
tool_name: Optional[str] = None
# NEW: For AI to optionally provide source/confidence
# source_references: Optional[List[str]] = Field(default=None, sa_column=Column(JSON)) # If using SQLAlchemy Column for JSON
# confidence_score: Optional[float] = 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