Spaces:
Sleeping
Sleeping
File size: 3,940 Bytes
a927fa4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | 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 ?") |