File size: 1,110 Bytes
6a3de9e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from sqlmodel import SQLModel, Field
from typing import Optional, Dict, Any
from datetime import datetime
from uuid import UUID, uuid4
from enum import Enum
from sqlalchemy.types import JSON


class MessageRoleEnum(str, Enum):
    user = "user"
    assistant = "assistant"


class MessageBase(SQLModel):
    conversation_id: UUID = Field(nullable=False, foreign_key="conversation.id")
    role: MessageRoleEnum = Field(nullable=False)
    content: str = Field(nullable=False, max_length=10000)
    metadata_: Optional[Dict[str, Any]] = Field(default=None, sa_type=JSON)


class Message(MessageBase, table=True):
    """
    Represents a single message in a conversation, either from user or assistant.
    """
    id: Optional[UUID] = Field(default_factory=uuid4, primary_key=True)
    timestamp: datetime = Field(default_factory=datetime.utcnow)


class MessageCreate(MessageBase):
    """Schema for creating a new message."""
    conversation_id: UUID
    role: MessageRoleEnum
    content: str


class MessageRead(MessageBase):
    """Schema for reading message data."""
    id: UUID
    timestamp: datetime