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 ?")