models.py (1682B)
1 """Pydantic models for request/response types.""" 2 3 from pydantic import BaseModel 4 5 6 class SetupRequest(BaseModel): 7 """First-run setup payload.""" 8 password: str 9 api_key: str = "" 10 11 12 class LoginRequest(BaseModel): 13 """Login payload.""" 14 password: str 15 16 17 class AuthResponse(BaseModel): 18 """Response after successful auth.""" 19 token: str 20 21 22 class AuthStatus(BaseModel): 23 """Current auth state.""" 24 configured: bool 25 authenticated: bool = False 26 27 28 class TopicCreate(BaseModel): 29 """Create a topic.""" 30 name: str 31 color: str | None = "#6366f1" 32 33 34 class TopicUpdate(BaseModel): 35 """Update a topic.""" 36 name: str | None = None 37 color: str | None = None 38 sort_order: int | None = None 39 40 41 class TopicResponse(BaseModel): 42 """Topic details.""" 43 id: str 44 name: str 45 color: str 46 sort_order: int 47 created_at: int 48 session_count: int | None = None 49 50 51 class SessionCreate(BaseModel): 52 """Create a session (proxy to Hermes).""" 53 name: str | None = None 54 topic_id: str | None = None 55 56 57 class SessionUpdate(BaseModel): 58 """Update a session.""" 59 name: str | None = None 60 status: str | None = None 61 62 63 class SessionResponse(BaseModel): 64 """Session detail (proxied from Hermes).""" 65 id: str 66 name: str | None = None 67 status: str | None = None 68 created_at: int | None = None 69 70 71 class AttachmentResponse(BaseModel): 72 """Attachment metadata.""" 73 id: str 74 filename: str 75 content_type: str 76 size_bytes: int 77 created_at: int 78 79 80 class ChatMessage(BaseModel): 81 """Send a chat message.""" 82 session_id: str 83 content: str 84 attachments: list[str] | None = None 85 model: str | None = None