""" Esquema de resultado esperado de modelos de transcripción de video. Propósito: Define el formato estándar de los resultados devueltos por los modelos de transcripción de video, independientemente del proveedor de IA utilizado. Homologación: Garantiza que el resultado de la transcripción siempre se entregue en el mismo formato estándar para Qualidot. """ from fastapi import UploadFile from fastapi.params import File, Form from pydantic import BaseModel, Field from typing import List, Optional class VideoRequestFile: """Modelo de solicitud para transcripción de video.""" def __init__( self, file: UploadFile = File(..., description="Archivo de video a procesar (ej. mp4, mov)"), provider: str = Form(..., description="Proveedor de IA a utilizar (ej. openai, assemblyai)"), model: str = Form(..., description="Modelo de IA a utilizar (ej. whisper-1)"), diarization: Optional[bool] = Form(False, description="Activa la separación e identificación de múltiples hablantes"), timestamps: Optional[bool] = Form(False, description="Activa las marcas de tiempo exactas por cada segmento hablado"), sentiment: Optional[bool] = Form(False, description="Activa el análisis de sentimiento (POSITIVO/NEGATIVO) por segmento") ): self.file = file self.provider = provider self.model = model self.diarization = diarization self.timestamps = timestamps self.sentiment = sentiment class StandardTranscriptionResult(BaseModel): """Modelo que representa el resultado estándar de una transcripción de video para Qualidot.""" status: str = Field( ..., description="Estado final de la petición ('success' o 'error')" ) original_filename: str = Field( ..., description="Nombre original del archivo de video procesado" ) provider_used: str = Field( ..., description="Proveedor de IA que ejecutó la transcripción (ej. OpenAI)" ) model_used: str = Field( ..., description="Modelo específico utilizado para el proceso" ) full_transcript: Optional[str] = Field( None, description="Texto completo y continuo de toda la transcripción" ) segments: Optional[List[dict]] = Field( ##Queda pendiente definir mejor la estructura de cada segmento según las opciones avanzadas None, description="Lista detallada de segmentos si se solicitaron opciones avanzadas (diarization, timestamps, sentiment)" ) confidence_score: Optional[float] = Field( None, description="Nivel de certeza global del modelo (valor entre 0.0 y 1.0)" )