Spaces:
Sleeping
Sleeping
| import uuid | |
| from datetime import datetime | |
| from typing import Optional, List | |
| from enum import Enum | |
| from sqlmodel import Field, SQLModel, Relationship | |
| class TaskStatus(str, Enum): | |
| TODO = "TODO" | |
| IN_PROGRESS = "IN_PROGRESS" | |
| DONE = "DONE" | |
| class TaskPriority(str, Enum): | |
| LOW = "LOW" | |
| MEDIUM = "MEDIUM" | |
| HIGH = "HIGH" | |
| # Better Auth Compatible Models | |
| class UserBase(SQLModel): | |
| email: str = Field(unique=True, index=True) | |
| name: Optional[str] = None | |
| image: Optional[str] = None | |
| class User(UserBase, table=True): | |
| id: str = Field(primary_key=True) | |
| emailVerified: bool = Field(default=False) | |
| createdAt: datetime = Field(default_factory=datetime.utcnow) | |
| updatedAt: datetime = Field(default_factory=datetime.utcnow) | |
| tasks: List["Task"] = Relationship(back_populates="owner") | |
| sessions: List["Session"] = Relationship(back_populates="user") | |
| conversations: List["Conversation"] = Relationship(back_populates="user") | |
| class UserCreate(UserBase): | |
| id: Optional[str] = Field(default_factory=lambda: str(uuid.uuid4())) | |
| password: str | |
| class UserRead(UserBase): | |
| id: str | |
| createdAt: datetime | |
| updatedAt: datetime | |
| class Session(SQLModel, table=True): | |
| id: str = Field(primary_key=True) | |
| expiresAt: datetime | |
| token: str | |
| createdAt: datetime = Field(default_factory=datetime.utcnow) | |
| updatedAt: datetime = Field(default_factory=datetime.utcnow) | |
| ipAddress: Optional[str] = None | |
| userAgent: Optional[str] = None | |
| userId: str = Field(foreign_key="user.id") | |
| user: User = Relationship(back_populates="sessions") | |
| class Account(SQLModel, table=True): | |
| id: str = Field(primary_key=True) | |
| accountId: str | |
| providerId: str | |
| userId: str = Field(foreign_key="user.id") | |
| accessToken: Optional[str] = None | |
| refreshToken: Optional[str] = None | |
| idToken: Optional[str] = None | |
| accessTokenExpiresAt: Optional[datetime] = None | |
| refreshTokenExpiresAt: Optional[datetime] = None | |
| scope: Optional[str] = None | |
| password: Optional[str] = None | |
| createdAt: datetime = Field(default_factory=datetime.utcnow) | |
| updatedAt: datetime = Field(default_factory=datetime.utcnow) | |
| class Verification(SQLModel, table=True): | |
| id: str = Field(primary_key=True) | |
| identifier: str | |
| value: str | |
| expiresAt: datetime | |
| createdAt: datetime = Field(default_factory=datetime.utcnow) | |
| updatedAt: datetime = Field(default_factory=datetime.utcnow) | |
| class TaskBase(SQLModel): | |
| title: str = Field(index=True) | |
| description: Optional[str] = None | |
| status: TaskStatus = Field(default=TaskStatus.TODO) | |
| priority: Optional[TaskPriority] = Field(default=TaskPriority.MEDIUM) | |
| class Task(TaskBase, table=True): | |
| id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) | |
| created_at: datetime = Field(default_factory=datetime.utcnow) | |
| updated_at: datetime = Field(default_factory=datetime.utcnow) | |
| owner_id: str = Field(foreign_key="user.id") | |
| owner: User = Relationship(back_populates="tasks") | |
| class TaskCreate(TaskBase): | |
| pass | |
| class TaskUpdate(SQLModel): | |
| title: Optional[str] = None | |
| description: Optional[str] = None | |
| status: Optional[TaskStatus] = None | |
| priority: Optional[TaskPriority] = None | |
| class TaskRead(TaskBase): | |
| id: uuid.UUID | |
| created_at: datetime | |
| updated_at: datetime | |
| owner_id: str | |
| class MessageRole(str, Enum): | |
| USER = "user" | |
| ASSISTANT = "assistant" | |
| SYSTEM = "system" | |
| TOOL = "tool" | |
| class Conversation(SQLModel, table=True): | |
| id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) | |
| user_id: str = Field(foreign_key="user.id") | |
| title: Optional[str] = None | |
| created_at: datetime = Field(default_factory=datetime.utcnow) | |
| updated_at: datetime = Field(default_factory=datetime.utcnow) | |
| user: User = Relationship(back_populates="conversations") | |
| messages: List["Message"] = Relationship(back_populates="conversation") | |
| class Message(SQLModel, table=True): | |
| id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) | |
| conversation_id: uuid.UUID = Field(foreign_key="conversation.id") | |
| role: MessageRole | |
| content: Optional[str] = None | |
| tool_calls: Optional[str] = None # Store as JSON string | |
| tool_call_id: Optional[str] = None # For 'tool' role messages | |
| name: Optional[str] = None # Name of the tool called | |
| created_at: datetime = Field(default_factory=datetime.utcnow) | |
| conversation: Conversation = Relationship(back_populates="messages") | |