"""Module containing the data models for the application.""" from typing import Optional, List from pydantic import BaseModel, Field class ReqData(BaseModel): """ RequestData is a Pydantic model that represents the data structure for a request. Attributes: query (str): The query string provided by the user. chat_id (str): The unique identifier for the chat session. user_id (str): The unique identifier for the user. web (Optional[bool]): A flag indicating if the request is from the web. Defaults to False. """ query: str id: Optional[List[str]] = [] site: Optional[List[str]] = [] chat_id: str user_id: str web: Optional[bool] = False class MailReqData(BaseModel): """ MailReqData is a data model representing the structure of a mail request. Attributes: email (str): The email address of the sender. query (str): The query or message content sent by the user. """ email: str query: Optional[str] = "" class ReqFollowUp(BaseModel): """ RequestFollowUp is a Pydantic model that represents a request for follow-up. Attributes: query (str): The query string that needs follow-up. contexts (list[str]): A list of context strings related to the query. """ query: str contexts: list[str] class FollowUpQ(BaseModel): """ FollowUpQ model to represent a follow-up question based on context information. Attributes: question (list[str]): A list of follow-up questions based on context information. """ questions: list[str] = Field(..., description="3 Follow up questions based on context.") class ChatHistory(BaseModel): """ ChatHistory model representing a chat session. Attributes: chat_id (str): The unique identifier for the chat session. user_id (str): The unique identifier for the user. """ chat_id: str user_id: str class ChatSession(BaseModel): """ ChatSession model representing a chat session. Attributes: user_id (str): The unique identifier for the user. """ user_id: str