Files
ia-microservice/app/schemas/image_standard.py
2026-03-31 03:54:46 -06:00

60 lines
3.6 KiB
Python

"""
Esquema de resultado esperado de modelos de análisis de imágenes.
Propósito:
Define el formato estándar de los resultados devueltos por los modelos de análisis
de imágenes, independientemente del proveedor de IA utilizado.
Homologación:
Garantiza que el resultado del análisis de imágenes 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 ImageEvaluationCriteria(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["ImageEvaluationCriteria"]] = Field(None, description="Lista de subcriterios de evaluación")
class ImageEvaluationRubric(BaseModel):
"""Modelo que representa una rúbrica de evaluación personalizada para análisis de imágenes."""
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[ImageEvaluationCriteria] = Field(None, description="Lista de criterios de evaluación específicos")
@dataclass
class ImageRequestFile:
"""Modelo de solicitud para análisis de imágenes."""
file: UploadFile = File(..., description="Archivo de imagen a procesar (ej. jpg, png)")
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 StandardImageAnalysisResult(BaseModel):
"""Modelo que representa el resultado estándar de un análisis de imágenes para Qualidot."""
status: str = Field(..., description="Estado del análisis (ej. 'success', 'error')")
original_filename: str = Field(..., description="Nombre original del archivo de imagen procesada")
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 a la imagen 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[ImageEvaluationCriteria] = Field(None, description="Lista de criterios de evaluación detallados con sus respectivas puntuaciones y descripciones")
class StandardImageAnalysis(BaseModel):
"""Modelo que representa el resultado estándar de un análisis de imágenes para Qualidot."""
score: float = Field(None, description="Puntuación general asignada a la imagen 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[ImageEvaluationCriteria] = Field(None, description="Lista de criterios de evaluación detallados con sus respectivas puntuaciones y descripciones")