PARA.AI / api /models /responses.py
Carlex22's picture
Revert "ParaAIV3.1"
1f24745
"""
Response models para para.AI API v3.0
Define estrutura de responses para todos os endpoints
"""
from typing import Optional, Dict, List, Any
from datetime import datetime
from pydantic import BaseModel, Field
from enum import Enum
# ============================================================================
# ENUMS
# ============================================================================
class ProcessingStatus(str, Enum):
"""Status de processamento."""
PENDING = "pending"
PROCESSING = "processing"
COMPLETED = "completed"
ERROR = "error"
CANCELLED = "cancelled"
# ============================================================================
# HEALTH & STATUS
# ============================================================================
class HealthResponse(BaseModel):
"""Response do health check."""
status: str = Field(..., description="Status geral (healthy/degraded/unhealthy)")
version: str = Field(..., description="Versão da API")
environment: str = Field(..., description="Ambiente (production/development)")
timestamp: datetime = Field(..., description="Timestamp do check")
uptime_seconds: float = Field(..., description="Tempo de uptime em segundos")
services: Dict[str, bool] = Field(default_factory=dict, description="Status dos serviços")
metrics: Dict[str, Any] = Field(default_factory=dict, description="Métricas do sistema")
# ============================================================================
# PROCESSING
# ============================================================================
class ProcessingResponse(BaseModel):
"""Response de processamento."""
task_id: str = Field(..., description="ID único da task")
status: ProcessingStatus = Field(..., description="Status atual")
message: str = Field(..., description="Mensagem descritiva")
total_records: int = Field(default=0, description="Total de registros")
processed_records: int = Field(default=0, description="Registros processados")
failed_records: int = Field(default=0, description="Registros com falha")
started_at: Optional[datetime] = Field(default=None, description="Início do processamento")
completed_at: Optional[datetime] = Field(default=None, description="Fim do processamento")
download_url: Optional[str] = Field(default=None, description="URL para download")
errors: List[str] = Field(default_factory=list, description="Lista de erros")
result_metadata: Optional[Dict[str, Any]] = Field(default=None, description="Metadados do resultado")
class FileInfoResponse(BaseModel):
"""Informações sobre arquivo."""
filename: str = Field(..., description="Nome do arquivo")
size_bytes: int = Field(..., description="Tamanho em bytes")
hash_sha256: str = Field(..., description="Hash SHA256")
created_at: datetime = Field(..., description="Data de criação")
# ============================================================================
# DEBUG & INFO
# ============================================================================
class SystemInfoResponse(BaseModel):
"""Informações do sistema."""
python_version: str
environment: str
debug_mode: bool
paths: Dict[str, str]
llm_config: Dict[str, Any]
database: Dict[str, Any]
class LLMTestResponse(BaseModel):
"""Response de teste de LLM."""
provider: str
model: str
success: bool
response: Optional[str] = None
tokens_used: Optional[int] = None
duration_ms: float
error: Optional[str] = None
class ProcessorTestResponse(BaseModel):
"""Response de teste de processador."""
processor_name: str
success: bool
result: Optional[Dict[str, Any]] = None
duration_ms: float
error: Optional[str] = None
class DatabaseStatsResponse(BaseModel):
"""Estatísticas do banco de dados."""
total_acordaos: int
total_tribunais: int
total_usuarios: int
total_decisoes: int
database_size_mb: Optional[float] = None
# ============================================================================
# GENERIC
# ============================================================================
class MessageResponse(BaseModel):
"""Response genérica com mensagem."""
message: str
details: Optional[Dict[str, Any]] = None
class ErrorResponse(BaseModel):
"""Response de erro."""
error: str
message: str
details: Optional[Dict[str, Any]] = None
timestamp: datetime = Field(default_factory=datetime.now)