Spaces:
Runtime error
Runtime error
| """ | |
| Request models para para.AI API v3.0 | |
| Define estrutura de requests para todos os endpoints | |
| CORRIGIDO: Adicionado model_config para resolver warning Pydantic | |
| """ | |
| from typing import Optional, List | |
| from pydantic import BaseModel, Field, field_validator, ConfigDict | |
| # ============================================================================ | |
| # PROCESSING | |
| # ============================================================================ | |
| class ProcessingOptionsRequest(BaseModel): | |
| """ | |
| Opções de processamento. | |
| CORRIGIDO: model_config adicionado para resolver warning de namespace | |
| """ | |
| # ✅ Configuração para permitir campos "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="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=True, | |
| description="Salvar resultados no banco" | |
| ) | |
| 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 | |
| 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=8024, | |
| 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" | |
| ) | |