"""Pydantic models for API request/response validation.""" from pydantic import BaseModel from datetime import datetime class TaskIDRequest(BaseModel): """Request model for task-based endpoints.""" task_id: int class SuggestGroupsResponse(BaseModel): """Response model for group suggestion endpoint.""" suggested_groups: list[str] class ChatMessage(BaseModel): """Model for individual chat messages.""" role: str # 'user', 'ai', 'system' content: str created_at: datetime | None = None class ChatRequest(BaseModel): """Request model for chat endpoint.""" message: str task_id: int project_title: str current_stage: str output_mode: str = "standard" prompt_group_config: dict | None = None custom_system_prompt: str | None = None conversation_id: str | None = None # Optional conversation ID for persistence current_group_name: str | None = None selected_standards: list[dict] | None = None current_alignment_work: str | None = None message_history: list[ChatMessage] | None = None # Sliding window of recent messages class ChatResponse(BaseModel): """Response model for chat endpoint.""" response: str conversation_id: str | None = None # Return conversation ID for tracking class ConversationSummary(BaseModel): """Summary model for conversation list.""" id: str title: str | None project_id: str | None created_at: datetime updated_at: datetime class ConversationListResponse(BaseModel): """Response model for listing conversations.""" conversations: list[ConversationSummary] class ConversationMessagesResponse(BaseModel): """Response model for fetching conversation messages.""" conversation_id: str messages: list[ChatMessage] class GenerateRubricRequest(BaseModel): """Request model for rubric generation endpoint.""" task_id: int prompt_groups: dict class GenerateRubricResponse(BaseModel): """Response model for rubric generation endpoint.""" rubric: dict message: str