""" Request models para para.AI API v3.0 Define estrutura de requests para todos os endpoints """ from typing import Optional, List from pydantic import BaseModel, Field, field_validator # ============================================================================ # PROCESSING # ============================================================================ class ProcessingOptionsRequest(BaseModel): """Opções de processamento.""" 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="Habilitar processamento 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") @field_validator("llm_provider") @classmethod def validate_provider(cls, v): allowed = ["groq", "openai", "anthropic"] if v not in allowed: raise ValueError(f"Provider deve ser um de: {allowed}") return v @field_validator("model_type") @classmethod def validate_model_type(cls, v): allowed = ["fast", "balanced", "quality"] if v not in allowed: raise ValueError(f"Model type deve ser um de: {allowed}") return v # ============================================================================ # LLM TESTING # ============================================================================ class LLMGenerateRequest(BaseModel): """Request para gerar texto com LLM.""" prompt: str = Field(..., description="Prompt para o LLM", min_length=1) provider: str = Field(default="groq", description="Provedor LLM") model: Optional[str] = Field(default=None, description="Model específico (opcional)") temperature: float = Field(default=0.7, ge=0.0, le=2.0, description="Temperatura") max_tokens: int = Field(default=1024, ge=1, le=4096, description="Máximo de tokens") # ============================================================================ # PROCESSOR TESTING # ============================================================================ class ProcessorTestRequest(BaseModel): """Request para testar processador.""" processor_name: str = Field(..., description="Nome do processador (1-9 ou nome completo)") ementa: str = Field(..., description="Texto da ementa", min_length=10) integra: str = Field(..., description="Texto da íntegra", min_length=10) tribunal: str = Field(default="TJPR", description="Sigla do tribunal") llm_provider: str = Field(default="groq", description="Provedor LLM") # ============================================================================ # FILE OPERATIONS # ============================================================================ class FileCreateRequest(BaseModel): """Request para criar arquivo.""" content: str = Field(..., description="Conteúdo do arquivo") filename: str = Field(..., description="Nome do arquivo") acordao_id: Optional[str] = Field(default=None, description="ID do acórdão relacionado") class FileListRequest(BaseModel): """Request para listar arquivos.""" acordao_id: Optional[str] = Field(default=None, description="Filtrar por acórdão") 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")