Spaces:
Sleeping
Sleeping
| """SQLModel database models.""" | |
| from enum import Enum | |
| from sqlmodel import SQLModel, Field, Relationship | |
| from datetime import datetime, timezone | |
| from typing import Optional, List | |
| class MessageRole(str, Enum): | |
| """Enum for chat message roles.""" | |
| USER = "user" | |
| ASSISTANT = "assistant" | |
| class Task(SQLModel, table=True): | |
| """Task database model with user ownership.""" | |
| __tablename__ = "tasks" | |
| id: Optional[int] = Field(default=None, primary_key=True) | |
| user_id: str = Field(index=True, nullable=False) | |
| title: str = Field(max_length=200, nullable=False) | |
| description: Optional[str] = Field(default=None) | |
| completed: bool = Field(default=False, index=True) | |
| created_at: Optional[datetime] = Field( | |
| default_factory=lambda: datetime.now(timezone.utc).replace(tzinfo=None) | |
| ) | |
| updated_at: Optional[datetime] = Field( | |
| default_factory=lambda: datetime.now(timezone.utc).replace(tzinfo=None) | |
| ) | |
| class Conversation(SQLModel, table=True): | |
| """Conversation model for chat sessions.""" | |
| __tablename__ = "conversations" | |
| id: Optional[int] = Field(default=None, primary_key=True) | |
| user_id: str = Field(index=True, nullable=False) | |
| created_at: Optional[datetime] = Field( | |
| default_factory=lambda: datetime.now(timezone.utc).replace(tzinfo=None) | |
| ) | |
| updated_at: Optional[datetime] = Field( | |
| default_factory=lambda: datetime.now(timezone.utc).replace(tzinfo=None) | |
| ) | |
| # Relationship to messages | |
| messages: List["Message"] = Relationship(back_populates="conversation") | |
| class Message(SQLModel, table=True): | |
| """Message model for individual chat messages.""" | |
| __tablename__ = "messages" | |
| id: Optional[int] = Field(default=None, primary_key=True) | |
| conversation_id: int = Field(foreign_key="conversations.id", index=True, nullable=False) | |
| user_id: str = Field(index=True, nullable=False) | |
| role: MessageRole = Field(nullable=False) | |
| content: str = Field(nullable=False) | |
| created_at: Optional[datetime] = Field( | |
| default_factory=lambda: datetime.now(timezone.utc).replace(tzinfo=None), | |
| index=True | |
| ) | |
| # Relationship back to conversation | |
| conversation: Optional[Conversation] = Relationship(back_populates="messages") | |