Lê uma conversa inteira e devolve resumo, sinais de risco, momentos-chave e próximos passos — em português, gerados por um modelo que roda na GPU aqui dentro.
Não tem banco e não guarda nada. Nenhum texto de conversa sai da infraestrutura, e o resultado existe só em trânsito até quem pediu.
Este serviço roda na máquina do mantenedor, junto do
gwan-slm — a geração precisa da GPU. Isso decide o que serve para quem.
Único caminho para um app em produção, e o único que atravessa a internet — por pull: este serviço puxa do RabbitMQ, nada entra pela NAT.
publica → insight.jobs.requests opcional: priorClassification resposta → a fila do seu replyTo
Existe para diagnóstico e desenvolvimento; demora dezenas de segundos e só alcança quem está na mesma máquina.
POST http://gwan-insight:8000/api/insight GET /health → 'ok' ou 'slm-unreachable' GET /contract → JSON Schema
Com a máquina desligada, a fila acumula e ninguém responde. Publique com TTL
(x-message-ttl) e trate a ausência de resposta como caso normal.
Não há fallback. Diferente do gwan-classify, que cai para regra
determinística, não existe heurística razoável para "resumir uma conversa". Se o
gwan-slm estiver fora, o job falha com SLM_UNAVAILABLE — e o
/health responde slm-unreachable em vez de mentir
ok.
Mandar tudo estoura o contexto numa GPU de consumo. O serviço escolhe
uma janela de turnos — e o campo windowTurnIndexes devolve exatamente
quais foram lidos, para quando o resumo parecer ter ignorado parte da conversa.
Recebendo os picos que o gwan-classify encontrou, a janela mira onde a
conversa azedou em vez das bordas.
Heurística: primeiros e últimos turnos, mais os mais longos — começo tem o pedido, fim tem o desfecho.
Corta os turnos mais curtos primeiro, e nunca o último — é o desfecho que decide os próximos passos.
JSON com uma tentativa de reparo. Momento-chave citando turno fora da janela é descartado, não corrigido.