Spaces:
Sleeping
Sleeping
File size: 1,582 Bytes
08af9fd | 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 | from datetime import datetime
from typing import Optional, List, Dict, Any, TYPE_CHECKING
from sqlmodel import SQLModel, Field, Relationship
from sqlalchemy import Column, String, ForeignKey, JSON, Text as sa_Text
if TYPE_CHECKING:
from .user import User
class Conversation(SQLModel, table=True):
"""
Conversation model for storing chat sessions.
"""
__tablename__ = "conversations"
id: Optional[int] = Field(default=None, primary_key=True)
user_id: str = Field(sa_column=Column(String, ForeignKey("auth_user.id"), index=True))
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
# Relationships
messages: List["Message"] = Relationship(back_populates="conversation")
user: Optional["User"] = Relationship(back_populates="conversations")
class Message(SQLModel, table=True):
"""
Message model for storing chat messages.
"""
__tablename__ = "messages"
id: Optional[int] = Field(default=None, primary_key=True)
conversation_id: int = Field(index=True, foreign_key="conversations.id")
user_id: str = Field(sa_column=Column(String, ForeignKey("auth_user.id"), index=True))
role: str = Field(max_length=20)
content: str = Field(sa_column=Column("content", sa_Text))
tool_calls: Optional[Dict[str, Any]] = Field(default=None, sa_column=Column(JSON))
created_at: datetime = Field(default_factory=datetime.utcnow)
# Relationships
conversation: Optional["Conversation"] = Relationship(back_populates="messages")
|