132 lines
4.2 KiB
Python
132 lines
4.2 KiB
Python
"""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")
|
|
thread_name: str = Field(..., description="Thread name")
|
|
date_created: float = Field(..., description="Thread creation timestamp")
|
|
date_updated: float = Field(..., description="Thread last updated timestamp")
|
|
|
|
|
|
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")
|
|
date_created: float = Field(..., description="Thread creation timestamp")
|
|
date_updated: float = Field(..., description="Thread last updated 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"},
|
|
"thread_name": {"en": "Thread Name", "fr": "Nom du fil"},
|
|
"date_created": {"en": "Date Created", "fr": "Date de création"},
|
|
"date_updated": {"en": "Date Updated", "fr": "Date de mise à jour"},
|
|
},
|
|
)
|
|
|
|
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"},
|
|
"date_created": {"en": "Date Created", "fr": "Date de création"},
|
|
"date_updated": {"en": "Date Updated", "fr": "Date de mise à jour"},
|
|
"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"},
|
|
},
|
|
)
|