""" Pydantic schemas for ConversationContext model. Request and response schemas for conversation context storage and recall. """ from datetime import datetime from typing import Optional from uuid import UUID from pydantic import BaseModel, Field class ConversationContextBase(BaseModel): """Base schema with shared ConversationContext fields.""" session_id: Optional[UUID] = Field(None, description="Session ID (optional)") project_id: Optional[UUID] = Field(None, description="Project ID (optional)") machine_id: Optional[UUID] = Field(None, description="Machine ID that created this context") context_type: str = Field(..., description="Type of context: session_summary, project_state, general_context") title: str = Field(..., description="Brief title describing the context") dense_summary: Optional[str] = Field(None, description="Compressed, structured summary (JSON or dense text)") key_decisions: Optional[str] = Field(None, description="JSON array of important decisions made") current_state: Optional[str] = Field(None, description="JSON object describing what's currently in progress") tags: Optional[str] = Field(None, description="JSON array of tags for retrieval and categorization") relevance_score: float = Field(1.0, ge=0.0, le=10.0, description="Float score for ranking relevance (0.0-10.0)") class ConversationContextCreate(ConversationContextBase): """Schema for creating a new ConversationContext.""" pass class ConversationContextUpdate(BaseModel): """Schema for updating an existing ConversationContext. All fields are optional.""" session_id: Optional[UUID] = Field(None, description="Session ID (optional)") project_id: Optional[UUID] = Field(None, description="Project ID (optional)") machine_id: Optional[UUID] = Field(None, description="Machine ID that created this context") context_type: Optional[str] = Field(None, description="Type of context: session_summary, project_state, general_context") title: Optional[str] = Field(None, description="Brief title describing the context") dense_summary: Optional[str] = Field(None, description="Compressed, structured summary (JSON or dense text)") key_decisions: Optional[str] = Field(None, description="JSON array of important decisions made") current_state: Optional[str] = Field(None, description="JSON object describing what's currently in progress") tags: Optional[str] = Field(None, description="JSON array of tags for retrieval and categorization") relevance_score: Optional[float] = Field(None, ge=0.0, le=10.0, description="Float score for ranking relevance (0.0-10.0)") class ConversationContextResponse(ConversationContextBase): """Schema for ConversationContext responses with ID and timestamps.""" id: UUID = Field(..., description="Unique identifier for the conversation context") created_at: datetime = Field(..., description="Timestamp when the context was created") updated_at: datetime = Field(..., description="Timestamp when the context was last updated") model_config = {"from_attributes": True}