from __future__ import annotations from typing import Any, Literal from pydantic import BaseModel, Field class MessagePart(BaseModel): type: str text: str | None = None data: dict[str, Any] | None = None class ChatMessage(BaseModel): id: str role: Literal["user", "assistant"] parts: list[MessagePart] class ChatRequest(BaseModel): conversation_id: str | None = None selected_task_id: str | None = None messages: list[ChatMessage] = Field(default_factory=list) provider_id: str | None = None model_id: str | None = None viewer_context: list[dict[str, Any]] = Field(default_factory=list) class ConversationPatch(BaseModel): current_task_id: str | None = None