Pular para o conteúdo

Adapter da API Valter

A camada de adapter que permite ao Juca se comunicar com a API REST do Valter para busca de jurisprudência, verificação e análise de grafos.

O Valter é o agente de backend principal do Juca — um serviço FastAPI com 23.400+ decisões do STJ, com busca, verificação, grafo de conhecimento e capacidades de LLM.

Atualmente, o Juca se comunica com o Valter de forma indireta, por meio de suas próprias rotas de API internas que replicam localmente parte da lógica do Valter. A camada de adapter (planejada para v0.3) fornecerá uma interface unificada para chamar qualquer agente de backend (Valter, Leci, futuros agentes) diretamente do orquestrador.

EndpointMétodoFinalidadeUsado Por
/v1/retrievePOSTBusca de jurisprudência (BM25 + semântica + GC)Briefing F1, F2; Busca
/v1/verifyPOSTVerificação de citações (súmulas, processos, ministros)Pipeline de validação
/v1/graph/optimal-argumentPOSTAnálise adversarial (riscos e oportunidades)Briefing F3
/v1/graph/divergenciasGET/POSTDivergências entre ministros em temas específicosBriefing F3; futuras views de comparação
/v1/graph/temporal-evolutionGETTendências temporais na jurisprudênciaAnalytics futuras
/v1/similar_casesPOSTBusca casos similares a um caso dadoBriefing F2
/v1/factual/*VáriosEndpoints de análise factualBriefing F1
/healthGETVerificação de saúde (deve retornar 200)Monitoramento, /api/health

O Valter usa autenticação por chave de API via header X-API-Key:

ConfiguraçãoValor
Método de authHeader X-API-Key
Variável de ambienteVALTER_API_KEY
Variável de URL baseVALTER_API_URL
URL de produçãohttps://valter-api-production.up.railway.app

Verificar conectividade:

Terminal window
curl -H "X-API-Key: $VALTER_API_KEY" \
https://valter-api-production.up.railway.app/health

Quando o adapter for implementado, as respostas do Valter serão mapeadas para blocos do Juca:

Endpoint ValterTipo de Bloco JucaTransformação
/v1/retrieve → resultadosprecedentCada resultado vira um bloco de precedente com processo, ementa, ministro, turma
/v1/retrieve → resumosummaryResumo agregado da busca
/v1/verify → verificaçãoMetadados do blocoStatus de verificação adicionado aos blocos existentes
/v1/graph/optimal-argument → riscosrisk_balancePares risco/oportunidade com pesos
/v1/similar_cases → correspondênciasprecedent_pickerCards de precedente selecionáveis

O adapter implementará uma estratégia padrão de tratamento de erros:

Erro do ValterComportamento do Juca
401 UnauthorizedRegistra o erro, exibe “Erro de configuração do backend” para o usuário
404 Not FoundRetorna resultados vazios com mensagem adequada
429 Rate LimitedTenta novamente com backoff exponencial (o Valter usa rate limiting baseado em Redis)
500+ Server ErrorExibe bloco de erro de fallback, registra no OTel
Timeout de redeCancela via AbortController (#238), exibe mensagem de timeout

A interface alvo do adapter para o v0.3:

// Planejado — src/lib/adapters/valter.ts
interface ValterAdapter {
retrieve(params: RetrieveParams): Promise<RetrieveResponse>
verify(params: VerifyParams): Promise<VerifyResponse>
graphOptimalArgument(params: GraphParams): Promise<GraphResponse>
graphDivergencias(params: DivergenciaParams): Promise<DivergenciaResponse>
similarCases(params: SimilarParams): Promise<SimilarResponse>
health(): Promise<HealthResponse>
}

O adapter centralizará autenticação, mapeamento de erros, transformação de respostas, lógica de retry e gerenciamento de timeout em um único lugar — mantendo os handlers de rota e as server actions limpos.