Team Ai
Apppublic

Multimedika/Bot_Development

sourceHugging Facemitupdated 2y agoView on Hugging Face
0likes
dto.py140 linesDownload Raw Back to service
1from pydantic import BaseModel, Field, field_validator2from typing import List, Optional, Dict, Any3from llama_index.core.llms import MessageRole4from datetime import datetime5import re6import pytz7 8jakarta_tz = pytz.timezone("Asia/Jakarta")9 10 11class PasswordValidator:12    @staticmethod13    def validate(password: str) -> str:14        if len(password) < 8 or len(password) > 32:15            raise ValueError("Password must be between 8 and 32 characters long")16        if not re.search(r"[A-Z]", password):17            raise ValueError("Password must contain at least one uppercase letter")18        if not re.search(r"[a-z]", password):19            raise ValueError("Password must contain at least one lowercase letter")20        if not re.search(r"\d", password):21            raise ValueError("Password must contain at least one digit")22        if not re.search(r'[!@#$%^&*(),.?":{}|<>]', password):23            raise ValueError("Password must contain at least one special character")24        return password25 26 27class CreateUserRequest(BaseModel):28    name: str29    username: str30    email: str31    password: str32    role_id: int = 233 34    @field_validator("password")35    def validate_password(cls, password):36        return PasswordValidator.validate(password)37 38 39class RoleCreate(BaseModel):40    name: str41 42 43class RoleUpdate(BaseModel):44    name: str45 46 47class LoginRequest(BaseModel):48    email: str49    password: str50 51 52class UserVerification(BaseModel):53    password: str54    new_password: str = Field(min_length=6)55 56    @field_validator("new_password")57    def validate_new_password(cls, new_password):58        return PasswordValidator.validate(new_password)59 60 61class Token(BaseModel):62    access_token: str63    token_type: str64 65 66class MetadataRequest(BaseModel):67    title: str68    category_id: int69    author: str70    year: int71    publisher: str72 73 74class MetadataResponse(BaseModel):75    id : int76    title: str77    author: str78    category: str  # Changed to reflect the actual category name79    category_id : int80    year: int81    publisher: str82    thumbnail: Optional[Any]  # Make thumbnail optional83 84    class Config:85        from_attributes = True86 87 88class DeleteById(BaseModel):89    id: str90 91 92class UserPromptRequest(BaseModel):93    prompt: str94    streaming: bool95 96 97class BotMetaCreate(BaseModel):98    metadata_id: List[int]  # List of integers for metadata_id99 100 101class BotCreateRequest(BaseModel):102    name: str103 104 105class BotResponse(BaseModel):106    role: str = "assistant"107    content: str108    metadata: List109    scores: List110 111 112class BotResponseStreaming(BaseModel):113    role: str = "assistant"114    content: Optional[str] = None115    completed_content: Optional[str] = None116    reference: Optional[str] = None117    metadata: Optional[Dict] = None118    score: Optional[float] = None119 120class TestStreaming(BaseModel):121    role: str = "assistant"122    content: str123 124 125class ChatMessage(BaseModel):126    """Chat message."""127 128    role: MessageRole = MessageRole.ASSISTANT129    content: Optional[Any] = ""130    metadata: Optional[List[Any]] = None131    timestamp : Optional[datetime] = datetime.now(jakarta_tz)132    payment: Optional[str] = Field(default=None)133    134class ChatHistory(BaseModel):135    messages: List[ChatMessage]136    137 138class CategoryCreate(BaseModel):139    category_name: str140