|
|
|
|
|
|
|
|
|
|
|
|
|
|
from typing import Optional |
|
|
from datetime import datetime |
|
|
from uuid import UUID, uuid4 |
|
|
from sqlmodel import SQLModel, Field, Column |
|
|
from sqlalchemy import JSON |
|
|
import enum |
|
|
|
|
|
|
|
|
class MessageRole(str, enum.Enum): |
|
|
"""Role of the message sender""" |
|
|
USER = "user" |
|
|
ASSISTANT = "assistant" |
|
|
TOOL = "tool" |
|
|
|
|
|
|
|
|
class Message(SQLModel, table=True): |
|
|
""" |
|
|
Represents a single interaction within a conversation. |
|
|
|
|
|
Attributes: |
|
|
id: Unique identifier for the message |
|
|
conversation_id: Conversation this message belongs to |
|
|
role: Role of the message sender (user/assistant/tool) |
|
|
content: Message content (user input or AI response) |
|
|
created_at: When the message was created |
|
|
tool_calls: Optional array of MCP tool calls made by the AI |
|
|
""" |
|
|
__tablename__ = "message" |
|
|
|
|
|
id: UUID = Field(default_factory=uuid4, primary_key=True) |
|
|
conversation_id: UUID = Field(foreign_key="conversation.id", index=True) |
|
|
role: MessageRole = Field(default=MessageRole.USER) |
|
|
content: str |
|
|
created_at: datetime = Field(default_factory=datetime.utcnow, index=True) |
|
|
tool_calls: Optional[dict] = Field(default=None, sa_column=Column(JSON)) |
|
|
|
|
|
|
|
|
|
|
|
|