DocImageAI-Explorer / models.py
SamiKLN's picture
Upload 3 files
a927fa4 verified
from typing import List, Optional, Union
from pydantic import BaseModel, Field, HttpUrl
from datetime import datetime
from enum import Enum
class FileType(str, Enum):
PDF = "pdf"
DOCX = "docx"
PPTX = "pptx"
XLSX = "xlsx"
JPG = "jpg"
JPEG = "jpeg"
PNG = "png"
class UploadedFile(BaseModel):
"""
Modèle pour les fichiers uploadés
"""
file_id: str = Field(..., description="ID unique du fichier")
file_name: str = Field(..., description="Nom original du fichier")
file_type: FileType = Field(..., description="Type du fichier")
file_path: str = Field(..., description="Chemin d'accès interne")
file_size: int = Field(..., description="Taille en octets")
upload_date: datetime = Field(default_factory=datetime.now, description="Date d'upload")
extracted_text: Optional[str] = Field(None, description="Texte extrait le cas échéant")
class Config:
json_schema_extra = {
"example": {
"file_id": "550e8400-e29b-41d4-a716-446655440000",
"file_name": "document.pdf",
"file_type": "pdf",
"file_path": "/uploads/550e8400-e29b-41d4-a716-446655440000.pdf",
"file_size": 1024,
"upload_date": "2023-01-01T00:00:00",
"extracted_text": "Lorem ipsum..."
}
}
class SummaryRequest(BaseModel):
"""
Modèle pour les requêtes de résumé
"""
file_id: str = Field(..., description="ID du fichier à résumer")
max_length: int = Field(150, gt=50, lt=500, description="Longueur maximale du résumé (50-500 mots)")
class SummaryResponse(BaseModel):
"""
Modèle pour les réponses de résumé
"""
original_length: int = Field(..., description="Nombre de mots original")
summary_length: int = Field(..., description="Nombre de mots du résumé")
summary: str = Field(..., description="Résumé généré")
processing_time: float = Field(..., description="Temps de traitement en secondes")
class ImageCaptionRequest(BaseModel):
"""
Modèle pour les requêtes de description d'image
"""
file_id: str = Field(..., description="ID du fichier image")
detail_level: str = Field("normal", regex="^(low|normal|high)$")
class ImageCaptionResponse(BaseModel):
"""
Modèle pour les réponses de description d'image
"""
caption: str = Field(..., description="Description générée")
confidence: float = Field(..., ge=0, le=1, description="Confiance du modèle (0-1)")
class QARequest(BaseModel):
"""
Modèle pour les requêtes de questions/réponses
"""
file_id: Optional[str] = Field(None, description="ID du fichier de référence (optionnel)")
question: str = Field(..., min_length=5, description="Question à poser")
context: Optional[str] = Field(None, description="Contexte supplémentaire")
class QAResponse(BaseModel):
"""
Modèle pour les réponses aux questions
"""
answer: str = Field(..., description="Réponse générée")
source: Optional[str] = Field(None, description="Source de la réponse le cas échéant")
confidence: Optional[float] = Field(None, ge=0, le=1, description="Niveau de confiance")
class ErrorResponse(BaseModel):
"""
Modèle standard pour les erreurs
"""
error: str = Field(..., description="Message d'erreur")
code: int = Field(..., description="Code HTTP")
details: Optional[Union[dict, list]] = Field(None, description="Détails supplémentaires")
class HealthCheck(BaseModel):
"""
Modèle pour le endpoint de santé
"""
status: str = Field(..., description="Statut du service")
version: str = Field(..., description="Version de l'API")
models_ready: bool = Field(..., description="Les modèles IA sont-ils chargés ?")