File size: 3,568 Bytes
8b10e33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
"""
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")