-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchat.py
More file actions
45 lines (32 loc) · 1.53 KB
/
chat.py
File metadata and controls
45 lines (32 loc) · 1.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
"""Models for chat sessions and messages."""
from datetime import datetime
from sqlalchemy import Column, Enum, ForeignKey, Integer, Text, TIMESTAMP
from sqlalchemy.dialects.postgresql import JSONB, UUID as PGUUID
from sqlalchemy.orm import relationship
from app.core.database_connection import Base
class ChatSession(Base):
"""Model for chat_sessions table - stores chat conversation sessions."""
__tablename__ = "chat_sessions"
id = Column(PGUUID(as_uuid=True), primary_key=True, server_default="uuid_generate_v4()")
created_at = Column(TIMESTAMP, default=datetime.utcnow, nullable=False)
session_metadata = Column("metadata", JSONB, nullable=True) # Map to 'metadata' column in DB
# Relationship to messages
messages = relationship("ChatMessage", back_populates="session", cascade="all, delete-orphan")
class ChatMessage(Base):
"""Model for chat_messages table - stores individual messages in a chat session."""
__tablename__ = "chat_messages"
id = Column(Integer, primary_key=True, index=True)
session_id = Column(
PGUUID(as_uuid=True),
ForeignKey("chat_sessions.id", ondelete="CASCADE"),
nullable=False,
index=True,
)
sender = Column(
Enum("user", "assistant", "system", name="sender_type", create_type=False),
nullable=False,
)
message = Column(Text, nullable=False)
created_at = Column(TIMESTAMP, default=datetime.utcnow, nullable=False)
# Relationship to session
session = relationship("ChatSession", back_populates="messages")