caarleexx commited on
Commit
af4e83f
·
verified ·
1 Parent(s): 473385d

Update api/models/requests.py

Browse files
Files changed (1) hide show
  1. api/models/requests.py +87 -71
api/models/requests.py CHANGED
@@ -1,79 +1,95 @@
1
  """
2
- Request models para para.AI API v3.0
3
- Define estrutura de requests para todos os endpoints
4
  """
 
5
  from typing import Optional, List
6
- from pydantic import BaseModel, Field, field_validator
7
 
8
 
9
- # ============================================================================
10
- # PROCESSING
11
- # ============================================================================
12
-
13
  class ProcessingOptionsRequest(BaseModel):
14
- """Opções de processamento."""
15
- llm_provider: str = Field(default="groq", description="Provedor LLM (groq/openai/anthropic)")
16
- model_type: str = Field(default="balanced", description="Tipo de modelo (fast/balanced/quality)")
17
- enable_parallel: bool = Field(default=True, description="Habilitar processamento paralelo")
18
- max_workers: int = Field(default=3, ge=1, le=10, description="Número de workers paralelos")
19
- save_to_db: bool = Field(default=False, description="Salvar resultados no banco")
20
-
21
- @field_validator("llm_provider")
22
- @classmethod
23
- def validate_provider(cls, v):
24
- allowed = ["groq", "openai", "anthropic"]
25
- if v not in allowed:
26
- raise ValueError(f"Provider deve ser um de: {allowed}")
27
- return v
28
-
29
- @field_validator("model_type")
30
- @classmethod
31
- def validate_model_type(cls, v):
32
- allowed = ["fast", "balanced", "quality"]
33
- if v not in allowed:
34
- raise ValueError(f"Model type deve ser um de: {allowed}")
35
- return v
36
-
37
-
38
- # ============================================================================
39
- # LLM TESTING
40
- # ============================================================================
41
-
42
- class LLMGenerateRequest(BaseModel):
43
- """Request para gerar texto com LLM."""
44
- prompt: str = Field(..., description="Prompt para o LLM", min_length=1)
45
- provider: str = Field(default="groq", description="Provedor LLM")
46
- model: Optional[str] = Field(default=None, description="Model específico (opcional)")
47
- temperature: float = Field(default=0.7, ge=0.0, le=2.0, description="Temperatura")
48
- max_tokens: int = Field(default=1024, ge=1, le=4096, description="Máximo de tokens")
49
-
50
-
51
- # ============================================================================
52
- # PROCESSOR TESTING
53
- # ============================================================================
54
-
55
- class ProcessorTestRequest(BaseModel):
56
- """Request para testar processador."""
57
- processor_name: str = Field(..., description="Nome do processador (1-9 ou nome completo)")
58
- ementa: str = Field(..., description="Texto da ementa", min_length=10)
59
- integra: str = Field(..., description="Texto da íntegra", min_length=10)
60
- tribunal: str = Field(default="TJPR", description="Sigla do tribunal")
61
- llm_provider: str = Field(default="groq", description="Provedor LLM")
62
-
63
-
64
- # ============================================================================
65
- # FILE OPERATIONS
66
- # ============================================================================
67
-
68
- class FileCreateRequest(BaseModel):
69
- """Request para criar arquivo."""
70
- content: str = Field(..., description="Conteúdo do arquivo")
71
- filename: str = Field(..., description="Nome do arquivo")
72
- acordao_id: Optional[str] = Field(default=None, description="ID do acórdão relacionado")
73
-
74
-
75
- class FileListRequest(BaseModel):
76
- """Request para listar arquivos."""
77
- acordao_id: Optional[str] = Field(default=None, description="Filtrar por acórdão")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  limit: int = Field(default=100, ge=1, le=1000, description="Limite de resultados")
79
  offset: int = Field(default=0, ge=0, description="Offset para paginação")
 
1
  """
2
+ Request models para a API
3
+ CORRIGIDO: model_config para evitar warning de namespace protegido
4
  """
5
+ from pydantic import BaseModel, Field, ConfigDict
6
  from typing import Optional, List
7
+ from datetime import datetime
8
 
9
 
 
 
 
 
10
  class ProcessingOptionsRequest(BaseModel):
11
+ """
12
+ Opções de processamento de acórdãos.
13
+
14
+ CORRIGIDO: Adicionado model_config para desabilitar protected_namespaces
15
+ """
16
+ # Configuração para permitir campos que começam com "model_"
17
+ model_config = ConfigDict(protected_namespaces=())
18
+
19
+ llm_provider: str = Field(
20
+ default="groq",
21
+ description="Provedor LLM (groq, openai, anthropic)"
22
+ )
23
+
24
+ model_type: str = Field(
25
+ default="balanced",
26
+ description="Tipo de modelo (fast, balanced, quality)"
27
+ )
28
+
29
+ enable_parallel: bool = Field(
30
+ default=True,
31
+ description="Processar especialistas em paralelo"
32
+ )
33
+
34
+ max_workers: int = Field(
35
+ default=3,
36
+ ge=1,
37
+ le=10,
38
+ description="Número de workers paralelos"
39
+ )
40
+
41
+ save_to_db: bool = Field(
42
+ default=False,
43
+ description="Salvar resultados no banco de dados"
44
+ )
45
+
46
+ specialist_ids: Optional[List[int]] = Field(
47
+ default=None,
48
+ description="IDs dos especialistas a executar (1-9), None = todos"
49
+ )
50
+
51
+
52
+ class AcordaoUploadRequest(BaseModel):
53
+ """Request para upload de acórdão individual."""
54
+
55
+ acordao_id: str = Field(..., description="ID único do acórdão")
56
+ tribunal: str = Field(..., description="Tribunal (ex: TJPR)")
57
+ ementa: str = Field(..., description="Ementa do acórdão")
58
+ integra: str = Field(..., description="Texto integral do acórdão")
59
+
60
+ # Campos opcionais
61
+ numero_processo: Optional[str] = Field(None, description="Número do processo")
62
+ relator: Optional[str] = Field(None, description="Nome do relator")
63
+ data_julgamento: Optional[datetime] = Field(None, description="Data do julgamento")
64
+ classe_processual: Optional[str] = Field(None, description="Classe processual")
65
+
66
+
67
+ class BatchProcessingRequest(BaseModel):
68
+ """Request para processamento em batch."""
69
+
70
+ acordaos: List[AcordaoUploadRequest] = Field(
71
+ ...,
72
+ description="Lista de acórdãos a processar"
73
+ )
74
+
75
+ processing_options: ProcessingOptionsRequest = Field(
76
+ default_factory=ProcessingOptionsRequest,
77
+ description="Opções de processamento"
78
+ )
79
+
80
+
81
+ class TaskStatusRequest(BaseModel):
82
+ """Request para consultar status de task."""
83
+
84
+ task_id: str = Field(..., description="ID da task")
85
+
86
+
87
+ class DatabaseQueryRequest(BaseModel):
88
+ """Request para consultas ao banco de dados."""
89
+
90
+ tribunal: Optional[str] = Field(None, description="Filtrar por tribunal")
91
+ relator: Optional[str] = Field(None, description="Filtrar por relator")
92
+ date_from: Optional[datetime] = Field(None, description="Data inicial")
93
+ date_to: Optional[datetime] = Field(None, description="Data final")
94
  limit: int = Field(default=100, ge=1, le=1000, description="Limite de resultados")
95
  offset: int = Field(default=0, ge=0, description="Offset para paginação")