"""Chatbot API models for request/response handling.""" from typing import List, Optional from pydantic import BaseModel, Field from modules.shared.attributeUtils import register_model_labels, ModelMixin # Chatbot API Models class MessageItem(BaseModel, ModelMixin): """Individual message in a thread""" role: str = Field(..., description="Message role (user or assistant)") content: str = Field(..., description="Message content") timestamp: float = Field(..., description="Message timestamp (Unix timestamp)") class ChatMessageRequest(BaseModel, ModelMixin): """Request model for posting a chat message""" thread_id: Optional[str] = Field( None, description="Thread ID (creates new thread if not provided)" ) message: str = Field(..., description="User message content") class ChatMessageResponse(BaseModel, ModelMixin): """Response model for posting a chat message""" thread_id: str = Field(..., description="Thread ID") messages: List[MessageItem] = Field(..., description="All messages in thread") class ThreadSummary(BaseModel, ModelMixin): """Summary of a chat thread for list view""" thread_id: str = Field(..., description="Thread ID") created_at: float = Field(..., description="Thread creation timestamp") last_message: str = Field(..., description="Last message content") message_count: int = Field(..., description="Total number of messages") class ThreadListResponse(BaseModel, ModelMixin): """Response model for listing all threads""" threads: List[ThreadSummary] = Field(..., description="List of thread summaries") class ThreadDetail(BaseModel, ModelMixin): """Detailed view of a single thread""" thread_id: str = Field(..., description="Thread ID") created_at: float = Field(..., description="Thread creation timestamp") messages: List[MessageItem] = Field( ..., description="All messages in chronological order" ) class DeleteResponse(BaseModel, ModelMixin): """Response model for delete operations""" message: str = Field(..., description="Confirmation message") thread_id: str = Field(..., description="Deleted thread ID") # Register model labels for internationalization register_model_labels( "MessageItem", {"en": "Message Item", "fr": "Élément de message"}, { "role": {"en": "Role", "fr": "Rôle"}, "content": {"en": "Content", "fr": "Contenu"}, "timestamp": {"en": "Timestamp", "fr": "Horodatage"}, }, ) register_model_labels( "ChatMessageRequest", {"en": "Chat Message Request", "fr": "Demande de message de chat"}, { "thread_id": {"en": "Thread ID", "fr": "ID du fil"}, "message": {"en": "Message", "fr": "Message"}, }, ) register_model_labels( "ChatMessageResponse", {"en": "Chat Message Response", "fr": "Réponse du message de chat"}, { "thread_id": {"en": "Thread ID", "fr": "ID du fil"}, "messages": {"en": "Messages", "fr": "Messages"}, }, ) register_model_labels( "ThreadSummary", {"en": "Thread Summary", "fr": "Résumé du fil"}, { "thread_id": {"en": "Thread ID", "fr": "ID du fil"}, "created_at": {"en": "Created At", "fr": "Créé le"}, "last_message": {"en": "Last Message", "fr": "Dernier message"}, "message_count": {"en": "Message Count", "fr": "Nombre de messages"}, }, ) register_model_labels( "ThreadListResponse", {"en": "Thread List Response", "fr": "Réponse de liste de fils"}, { "threads": {"en": "Threads", "fr": "Fils"}, }, ) register_model_labels( "ThreadDetail", {"en": "Thread Detail", "fr": "Détail du fil"}, { "thread_id": {"en": "Thread ID", "fr": "ID du fil"}, "created_at": {"en": "Created At", "fr": "Créé le"}, "messages": {"en": "Messages", "fr": "Messages"}, }, ) register_model_labels( "DeleteResponse", {"en": "Delete Response", "fr": "Réponse de suppression"}, { "message": {"en": "Message", "fr": "Message"}, "thread_id": {"en": "Thread ID", "fr": "ID du fil"}, }, )