view love/poppy/apis/schemas.py @ 108:f07abbcd2ec5

[HgWeb] Will probably hold off on using it since it is not urgent.
author June Park <parkjune1995@gmail.com>
date Sat, 03 Jan 2026 17:29:12 -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] = []