from typing import Literal from pydantic import BaseModel, field_validator class ChatMessage(BaseModel): role: Literal["system", "user", "assistant"] content: str class ChatRequest(BaseModel): messages: list[ChatMessage] max_tokens: int = 2048 temperature: float = 0.0 response_format: Literal["json", "text"] = "text" @field_validator("messages") @classmethod def messages_not_empty(cls, v: list) -> list: if not v: raise ValueError("messages must not be empty") return v class ChatResponse(BaseModel): content: str provider: str model: str input_tokens: int | None = None output_tokens: int | None = None