Spaces:
Sleeping
Sleeping
| 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 ?") |