Update docs/MODELCARD.md
Browse files- docs/MODELCARD.md +209 -5
docs/MODELCARD.md
CHANGED
|
@@ -8,10 +8,10 @@
|
|
| 8 |
| Campo | Valor |
|
| 9 |
|-------|-------|
|
| 10 |
| Nome | Para.AI Assuntos Jurídicos API |
|
| 11 |
-
| Versão | 1.0.
|
| 12 |
| Base URL | `https://api.para-ai.com` / `http://localhost:8000` |
|
| 13 |
| Protocolo | REST / JSON |
|
| 14 |
-
| Latência típica | 74ms (`/busca-q`) · 800ms (`/busca`) |
|
| 15 |
| Licença dados | CNJ — domínio público |
|
| 16 |
| Licença código | MIT |
|
| 17 |
|
|
@@ -25,6 +25,7 @@ Use este tool quando o usuário perguntar sobre:
|
|
| 25 |
- Legislação aplicável a um tema do Direito
|
| 26 |
- Hierarquia de ramos/categorias do Direito brasileiro
|
| 27 |
- Definição técnica de um instituto jurídico
|
|
|
|
| 28 |
|
| 29 |
---
|
| 30 |
|
|
@@ -110,6 +111,129 @@ Use este tool quando o usuário perguntar sobre:
|
|
| 110 |
|
| 111 |
---
|
| 112 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 113 |
## Exemplo — OpenAI Function Calling
|
| 114 |
|
| 115 |
```python
|
|
@@ -208,11 +332,91 @@ TOOL_ANTHROPIC = {
|
|
| 208 |
"topk": 1, "retornar": ["titulo", "definicao", "introducao"]}
|
| 209 |
```
|
| 210 |
|
| 211 |
-
### 4.
|
|
|
|
|
|
|
|
|
|
|
|
|
| 212 |
```
|
| 213 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 214 |
```
|
| 215 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 216 |
---
|
| 217 |
|
| 218 |
-
*v1.0.
|
|
|
|
| 8 |
| Campo | Valor |
|
| 9 |
|-------|-------|
|
| 10 |
| Nome | Para.AI Assuntos Jurídicos API |
|
| 11 |
+
| Versão | 1.0.1 |
|
| 12 |
| Base URL | `https://api.para-ai.com` / `http://localhost:8000` |
|
| 13 |
| Protocolo | REST / JSON |
|
| 14 |
+
| Latência típica | 74ms (`/busca-q`) · 800ms (`/busca`) · 120ms (`/grafo/filhos`) |
|
| 15 |
| Licença dados | CNJ — domínio público |
|
| 16 |
| Licença código | MIT |
|
| 17 |
|
|
|
|
| 25 |
- Legislação aplicável a um tema do Direito
|
| 26 |
- Hierarquia de ramos/categorias do Direito brasileiro
|
| 27 |
- Definição técnica de um instituto jurídico
|
| 28 |
+
- Navegação pela árvore de assuntos (drill-down hierárquico)
|
| 29 |
|
| 30 |
---
|
| 31 |
|
|
|
|
| 111 |
|
| 112 |
---
|
| 113 |
|
| 114 |
+
## Endpoint de Navegação: GET /grafo/filhos
|
| 115 |
+
|
| 116 |
+
**Retorna assuntos do mesmo nível e pastas filhas diretas de um nó da hierarquia.**
|
| 117 |
+
|
| 118 |
+
### Parâmetros
|
| 119 |
+
|
| 120 |
+
| Parâmetro | Tipo | Obrigatório | Descrição |
|
| 121 |
+
|-----------|------|-------------|-----------|
|
| 122 |
+
| `ancestor` | string | ✓ | Nome do nó ancestral (ex: "Crimes contra o Patrimônio") |
|
| 123 |
+
| `size` | integer | ✗ | Máximo de resultados (padrão: 50, max: 500) |
|
| 124 |
+
| `estruturado` | boolean | ✗ | Retornar resposta separada por tipo (padrão: false) |
|
| 125 |
+
|
| 126 |
+
### Comportamento
|
| 127 |
+
|
| 128 |
+
O endpoint retorna **APENAS**:
|
| 129 |
+
1. Assuntos do **mesmo nível hierárquico** do ancestor
|
| 130 |
+
2. **Pastas/categorias filhas diretas** (profundidade + 1)
|
| 131 |
+
|
| 132 |
+
**NÃO retorna** os assuntos dentro das pastas dos filhos (netos, bisnetos, etc.).
|
| 133 |
+
|
| 134 |
+
### Exemplo de Requisição
|
| 135 |
+
|
| 136 |
+
```bash
|
| 137 |
+
GET /grafo/filhos?ancestor=DIREITO DO CONSUMIDOR&size=50
|
| 138 |
+
```
|
| 139 |
+
|
| 140 |
+
### Schema da Resposta (modo padrão)
|
| 141 |
+
|
| 142 |
+
```json
|
| 143 |
+
{
|
| 144 |
+
"ancestor": "DIREITO DO CONSUMIDOR",
|
| 145 |
+
"total": 13,
|
| 146 |
+
"filhos": [
|
| 147 |
+
{
|
| 148 |
+
"id": "fb36b9c7...",
|
| 149 |
+
"nome_assunto": "DIREITO DO CONSUMIDOR",
|
| 150 |
+
"classes_profundidade": 1,
|
| 151 |
+
"classes_path": "DIREITO DO CONSUMIDOR",
|
| 152 |
+
"titulo_curto": "Direito do Consumidor",
|
| 153 |
+
"breve_sintese": "Assunto que abrange questões relativas à proteção...",
|
| 154 |
+
"dispositivos_legais": ["Lei nº 8.078/1990"]
|
| 155 |
+
},
|
| 156 |
+
{
|
| 157 |
+
"id": "0039f247...",
|
| 158 |
+
"nome_assunto": "Responsabilidade do Fornecedor",
|
| 159 |
+
"classes_profundidade": 2,
|
| 160 |
+
"classes_path": "DIREITO DO CONSUMIDOR > Responsabilidade do Fornecedor",
|
| 161 |
+
"titulo_curto": "Responsabilidade do Fornecedor",
|
| 162 |
+
"breve_sintese": "Trata da responsabilidade civil do fornecedor..."
|
| 163 |
+
},
|
| 164 |
+
{
|
| 165 |
+
"id": "0bcbb6ab...",
|
| 166 |
+
"nome_assunto": "Dever de Informação",
|
| 167 |
+
"classes_profundidade": 2,
|
| 168 |
+
"classes_path": "DIREITO DO CONSUMIDOR > Dever de Informação"
|
| 169 |
+
}
|
| 170 |
+
// ... mais 10 pastas de profundidade 2
|
| 171 |
+
]
|
| 172 |
+
}
|
| 173 |
+
```
|
| 174 |
+
|
| 175 |
+
### Schema da Resposta (modo estruturado)
|
| 176 |
+
|
| 177 |
+
```bash
|
| 178 |
+
GET /grafo/filhos?ancestor=DIREITO DO CONSUMIDOR&estruturado=true
|
| 179 |
+
```
|
| 180 |
+
|
| 181 |
+
```json
|
| 182 |
+
{
|
| 183 |
+
"ancestor": "DIREITO DO CONSUMIDOR",
|
| 184 |
+
"ancestor_profundidade": 1,
|
| 185 |
+
"total": 13,
|
| 186 |
+
"assuntos_mesmo_nivel": {
|
| 187 |
+
"total": 1,
|
| 188 |
+
"assuntos": [
|
| 189 |
+
{
|
| 190 |
+
"id": "fb36b9c7...",
|
| 191 |
+
"nome_assunto": "DIREITO DO CONSUMIDOR",
|
| 192 |
+
"classes_profundidade": 1,
|
| 193 |
+
"classes_path": "DIREITO DO CONSUMIDOR"
|
| 194 |
+
}
|
| 195 |
+
]
|
| 196 |
+
},
|
| 197 |
+
"pastas_com_filhos": {
|
| 198 |
+
"total": 12,
|
| 199 |
+
"pastas": [
|
| 200 |
+
{
|
| 201 |
+
"id": "0039f247...",
|
| 202 |
+
"nome_assunto": "Responsabilidade do Fornecedor",
|
| 203 |
+
"classes_profundidade": 2,
|
| 204 |
+
"classes_path": "DIREITO DO CONSUMIDOR > Responsabilidade do Fornecedor"
|
| 205 |
+
},
|
| 206 |
+
{
|
| 207 |
+
"id": "0bcbb6ab...",
|
| 208 |
+
"nome_assunto": "Dever de Informação",
|
| 209 |
+
"classes_profundidade": 2,
|
| 210 |
+
"classes_path": "DIREITO DO CONSUMIDOR > Dever de Informação"
|
| 211 |
+
}
|
| 212 |
+
// ... mais 10 pastas
|
| 213 |
+
]
|
| 214 |
+
}
|
| 215 |
+
}
|
| 216 |
+
```
|
| 217 |
+
|
| 218 |
+
### Caso de Uso
|
| 219 |
+
|
| 220 |
+
Ideal para construir interfaces de navegação em árvore, onde o usuário clica em uma pasta e vê apenas as subpastas diretas, não todos os conteúdos recursivamente.
|
| 221 |
+
|
| 222 |
+
```javascript
|
| 223 |
+
// Frontend - Navegação em árvore
|
| 224 |
+
async function loadChildren(nodeName) {
|
| 225 |
+
const response = await fetch(
|
| 226 |
+
`/grafo/filhos?ancestor=${nodeName}&estruturado=true`
|
| 227 |
+
);
|
| 228 |
+
const data = await response.json();
|
| 229 |
+
|
| 230 |
+
// Mostrar apenas as pastas clicáveis
|
| 231 |
+
return data.pastas_com_filhos.pastas;
|
| 232 |
+
}
|
| 233 |
+
```
|
| 234 |
+
|
| 235 |
+
---
|
| 236 |
+
|
| 237 |
## Exemplo — OpenAI Function Calling
|
| 238 |
|
| 239 |
```python
|
|
|
|
| 332 |
"topk": 1, "retornar": ["titulo", "definicao", "introducao"]}
|
| 333 |
```
|
| 334 |
|
| 335 |
+
### 4. Navegação hierárquica (drill-down)
|
| 336 |
+
|
| 337 |
+
**Listar pastas filhas diretas:**
|
| 338 |
+
```bash
|
| 339 |
+
GET /grafo/filhos?ancestor=Crimes contra o Patrimônio&size=20
|
| 340 |
```
|
| 341 |
+
|
| 342 |
+
**Resposta:**
|
| 343 |
+
- Assuntos do mesmo nível (irmãos)
|
| 344 |
+
- Pastas/categorias filhas diretas
|
| 345 |
+
- **NÃO** inclui assuntos dentro das pastas
|
| 346 |
+
|
| 347 |
+
**Navegação estruturada (para UIs):**
|
| 348 |
+
```bash
|
| 349 |
+
GET /grafo/filhos?ancestor=DIREITO PENAL&estruturado=true
|
| 350 |
+
```
|
| 351 |
+
|
| 352 |
+
**Casos de uso:**
|
| 353 |
+
- Construir árvores de navegação
|
| 354 |
+
- Breadcrumbs dinâmicos
|
| 355 |
+
- Interfaces de seleção hierárquica
|
| 356 |
+
- Sugestões de assuntos relacionados
|
| 357 |
+
|
| 358 |
+
### 5. Obter hierarquia completa
|
| 359 |
+
```bash
|
| 360 |
+
GET /hierarquia
|
| 361 |
```
|
| 362 |
|
| 363 |
+
Retorna a árvore completa de ramos → categorias → subcategorias em formato agregado.
|
| 364 |
+
|
| 365 |
+
---
|
| 366 |
+
|
| 367 |
+
## Comparação entre Endpoints de Navegação
|
| 368 |
+
|
| 369 |
+
| Endpoint | Retorna | Caso de Uso |
|
| 370 |
+
|----------|---------|-------------|
|
| 371 |
+
| `/hierarquia` | Árvore completa agregada | Visão geral, estatísticas |
|
| 372 |
+
| `/grafo/filhos` | Apenas nível atual + filhos diretos | Navegação incremental, UI |
|
| 373 |
+
| `/busca` | Busca full-text | Busca livre por palavras |
|
| 374 |
+
| `/busca-q` | Busca estruturada | Tool calling, RAG |
|
| 375 |
+
|
| 376 |
+
---
|
| 377 |
+
|
| 378 |
+
## Notas de Implementação
|
| 379 |
+
|
| 380 |
+
### Performance
|
| 381 |
+
|
| 382 |
+
- **Cache recomendado:** `/hierarquia` (raramente muda)
|
| 383 |
+
- **Taxa de limite:** 100 req/min por IP (ajustável)
|
| 384 |
+
- **Timeout:** 10s (aumentar para `/busca` com `texto_completo`)
|
| 385 |
+
|
| 386 |
+
### Paginação
|
| 387 |
+
|
| 388 |
+
```json
|
| 389 |
+
{
|
| 390 |
+
"page": 2,
|
| 391 |
+
"size": 20
|
| 392 |
+
}
|
| 393 |
+
```
|
| 394 |
+
|
| 395 |
+
Apenas em `/busca` (GET/POST). Outros endpoints usam `size` ou `topk`.
|
| 396 |
+
|
| 397 |
+
### Fuzzy Match
|
| 398 |
+
|
| 399 |
+
```json
|
| 400 |
+
{"modo": "fuzzy"} // Tolera erros de digitação (fuzziness AUTO)
|
| 401 |
+
{"modo": "exact"} // Match exato em campos keyword
|
| 402 |
+
```
|
| 403 |
+
|
| 404 |
+
---
|
| 405 |
+
|
| 406 |
+
## Changelog
|
| 407 |
+
|
| 408 |
+
### v1.0.1 (28/02/2026)
|
| 409 |
+
- ✨ Correção do endpoint `/grafo/filhos`: agora retorna apenas mesmo nível + filhos diretos
|
| 410 |
+
- ✨ Novo parâmetro `estruturado=true` para resposta separada por tipo
|
| 411 |
+
- 📝 Documentação expandida sobre navegação hierárquica
|
| 412 |
+
- 🐛 Fix: `/grafo/filhos` não retorna mais descendentes recursivos (netos, bisnetos)
|
| 413 |
+
|
| 414 |
+
### v1.0.0 (24/02/2026)
|
| 415 |
+
- 🚀 Release inicial
|
| 416 |
+
- Suporte a busca full-text e estruturada
|
| 417 |
+
- 5.184 assuntos jurídicos CNJ
|
| 418 |
+
- Endpoints REST completos
|
| 419 |
+
|
| 420 |
---
|
| 421 |
|
| 422 |
+
*v1.0.1 · 28/02/2026 · Para.AI*
|