""" Request models para a API CORRIGIDO: model_config para evitar warning de namespace protegido """ from pydantic import BaseModel, Field, ConfigDict from typing import Optional, List from datetime import datetime class ProcessingOptionsRequest(BaseModel): """ Opções de processamento de acórdãos. CORRIGIDO: Adicionado model_config para desabilitar protected_namespaces """ # ✅ Configuração para permitir campos que começam com "model_" model_config = ConfigDict(protected_namespaces=()) llm_provider: str = Field( default="groq", description="Provedor LLM (groq, openai, anthropic)" ) model_type: str = Field( default="balanced", description="Tipo de modelo (fast, balanced, quality)" ) enable_parallel: bool = Field( default=True, description="Processar especialistas em paralelo" ) max_workers: int = Field( default=3, ge=1, le=10, description="Número de workers paralelos" ) save_to_db: bool = Field( default=False, description="Salvar resultados no banco de dados" ) specialist_ids: Optional[List[int]] = Field( default=None, description="IDs dos especialistas a executar (1-9), None = todos" ) class AcordaoUploadRequest(BaseModel): """Request para upload de acórdão individual.""" acordao_id: str = Field(..., description="ID único do acórdão") tribunal: str = Field(..., description="Tribunal (ex: TJPR)") ementa: str = Field(..., description="Ementa do acórdão") integra: str = Field(..., description="Texto integral do acórdão") # Campos opcionais numero_processo: Optional[str] = Field(None, description="Número do processo") relator: Optional[str] = Field(None, description="Nome do relator") data_julgamento: Optional[datetime] = Field(None, description="Data do julgamento") classe_processual: Optional[str] = Field(None, description="Classe processual") class BatchProcessingRequest(BaseModel): """Request para processamento em batch.""" acordaos: List[AcordaoUploadRequest] = Field( ..., description="Lista de acórdãos a processar" ) processing_options: ProcessingOptionsRequest = Field( default_factory=ProcessingOptionsRequest, description="Opções de processamento" ) class TaskStatusRequest(BaseModel): """Request para consultar status de task.""" task_id: str = Field(..., description="ID da task") class DatabaseQueryRequest(BaseModel): """Request para consultas ao banco de dados.""" tribunal: Optional[str] = Field(None, description="Filtrar por tribunal") relator: Optional[str] = Field(None, description="Filtrar por relator") date_from: Optional[datetime] = Field(None, description="Data inicial") date_to: Optional[datetime] = Field(None, description="Data final") limit: int = Field(default=100, ge=1, le=1000, description="Limite de resultados") offset: int = Field(default=0, ge=0, description="Offset para paginação")