view love/poppy/apis/schemas.py @ 149:f41ac17926d2

[Config] Added ctags scripts and actual tags.
author June Park <parkjune1995@gmail.com>
date Sat, 10 Jan 2026 07:07:10 -0800
parents cf9caa4abc3e
children
line wrap: on
line source

from uuid import UUID
from pydantic import BaseModel, ConfigDict, field_serializer
from datetime import datetime
from typing import Literal, Optional


class MessageBase(BaseModel):
    role: Literal["user", "assistant"]
    content: str

    model_config = ConfigDict(from_attributes=True)


class MessageCreate(MessageBase):
    pass


class MessageOut(MessageBase):
    id: UUID
    image_url: Optional[str] = None
    created_at: datetime

    @field_serializer("id")
    def serialize_id(self, id: UUID):
        return str(id)

    # Automatically populate image_url / image_urls from relationship
    @classmethod
    def from_orm_with_assets(cls, obj):
        data = cls.model_validate(obj)

        image_assets = [
            a for a in getattr(obj, "assets", [])
            if a.asset_type == "image"
        ]

        image_urls = [a.url for a in image_assets if a.url]
        data.image_url = image_urls[0] if image_urls else None

        return data


class ChatOut(BaseModel):
    id: UUID
    title: str
    created_at: datetime

    model_config = ConfigDict(from_attributes=True)

    @field_serializer("id")
    def serialize_id(self, id: UUID):
        return str(id)


class ChatWithMessages(ChatOut):
    messages: list[MessageOut] = []

class Chats(BaseModel):
    chats: list[ChatOut] = []