PARA.AI / api /models /requests.py
caarleexx's picture
Upload 2 files
8b10e33 verified
raw
history blame
3.57 kB
"""
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")