from datetime import datetime from typing import List, Optional from pydantic import BaseModel, Field import uuid class Message(BaseModel): role: str content: str class Conversation(BaseModel): id: str = Field(default_factory=lambda: str(uuid.uuid4())) user_id: str messages: List[Message] = Field(default_factory=list) created_at: datetime = Field(default_factory=datetime.utcnow) updated_at: datetime = Field(default_factory=datetime.utcnow) def add_message(self, role: str, content: str): self.messages.append(Message(role=role, content=content)) self.updated_at = datetime.utcnow() def to_dict(self): return { "id": self.id, "user_id": self.user_id, "messages": [msg.model_dump() for msg in self.messages], "created_at": self.created_at.isoformat(), "updated_at": self.updated_at.isoformat(), } @classmethod def from_dict(cls, data: dict): data["messages"] = [Message(**msg) for msg in data["messages"]] return cls(**data)