Files
ia-microservice/app/schemas/document_standard.py
2026-03-31 20:00:04 -06:00

60 lines
3.7 KiB
Python

"""
Esquema de resultado esperado de modelos de análisis de documentos.
Propósito:
Define el formato estándar de los resultados devueltos por los modelos de análisis
de documentos, independientemente del proveedor de IA utilizado.
Homologación:
Garantiza que el resultado del análisis de documentos siempre se entregue en el mismo
formato estándar para Qualidot.
"""
from dataclasses import dataclass
from fastapi import UploadFile
from fastapi.params import File, Form
from pydantic import BaseModel, Field
from typing import List, Optional
class DocumentEvaluationCriteria(BaseModel):
"""Modelo que representa un criterio de evaluación específico dentro de una rúbrica de análisis de imágenes."""
name: str = Field(..., description="Nombre del criterio de evaluación")
description: str = Field(None, description="Descripción detallada del criterio")
score: float = Field(None, description="Puntuación asignada al criterio después del análisis")
subcriteria: Optional[List["DocumentEvaluationCriteria"]] = Field(None, description="Lista de subcriterios de evaluación")
class DocumentEvaluationRubric(BaseModel):
"""Modelo que representa una rúbrica de evaluación personalizada para análisis de documentos."""
name: str = Field(..., description="Nombre de la rúbrica de evaluación")
description: str = Field(None, description="Descripción detallada de la rúbrica")
category: Optional[str] = Field(
None,
description="Contexto jerárquico de la categoría para especializar a la IA (ej. Audio > Education > English > B2)"
)
criteria: List[DocumentEvaluationCriteria] = Field(None, description="Lista de criterios de evaluación específicos")
@dataclass
class DocumentRequestFile:
"""Modelo de solicitud para análisis de documentos."""
file: UploadFile = File(..., description="Archivo de documento a procesar (ej. pdf, docx)")
provider: str = Form(..., description="Proveedor de IA a utilizar (ej. openai, google)")
model: str = Form(..., description="Modelo de IA a utilizar (ej. vision-1)")
rubric: UploadFile = File(..., description="Archivo JSON de evaluación")
class StandardDocumentAnalysisResult(BaseModel):
"""Modelo que representa el resultado estándar de un análisis de documentos para Qualidot."""
status: str = Field(..., description="Estado del análisis (ej. 'success', 'error')")
original_filename: str = Field(..., description="Nombre original del archivo de documento procesado")
provider_used: str = Field(..., description="Proveedor de IA utilizado para el análisis (ej. 'OpenAI')")
model_used: str = Field(..., description="Modelo específico utilizado para el análisis (ej. 'vision-1')")
score: float = Field(None, description="Puntuación general asignada al documento después del análisis")
feedback: str = Field(None, description="Comentarios o retroalimentación generada por el modelo de IA sobre el documento")
detailed_criteria: List[DocumentEvaluationCriteria] = Field(None, description="Lista de criterios de evaluación detallados con sus respectivas puntuaciones y descripciones")
class StandardDocumentAnalysis(BaseModel):
"""Modelo que representa el resultado estándar de un análisis de documentos para Qualidot."""
score: float = Field(None, description="Puntuación general asignada al documento después del análisis")
feedback: str = Field(None, description="Comentarios o retroalimentación generada por el modelo de IA sobre la imagen")
detailed_criteria: List[DocumentEvaluationCriteria] = Field(None, description="Lista de criterios de evaluación detallados con sus respectivas puntuaciones y descripciones")