Skip to content

feat(ask): Consultar gera resposta via assinatura Claude do usuário (créditos dele)#158

Merged
BrunooMoniz merged 2 commits into
mainfrom
feat/ask-subscription
Jun 19, 2026
Merged

feat(ask): Consultar gera resposta via assinatura Claude do usuário (créditos dele)#158
BrunooMoniz merged 2 commits into
mainfrom
feat/ask-subscription

Conversation

@BrunooMoniz

Copy link
Copy Markdown
Owner

O chat Consultar (/portal/ask) passa a gerar a resposta usando a assinatura Claude da própria conta quando ela está conectada (reusa o provider da curadoria), tirando o custo da chave central. Ativa automático pra quem conectou (sem flag).

  • generateAnswer com fallback à prova de falha (rota VIVA, sem gate): assinatura → central → degradado/canned. Só o caminho central é metered (a assinatura é faturada na conta da pessoa).
  • effort override em callSubscription: a chat roda em effort low (rápido/barato no plano do usuário). Default do provider inalterado (high).
  • accountId sempre da sessão; token nunca logado. classifyIntent segue central/barato.
  • 1455 testes verdes (7 novos cobrindo conectada→assinatura sem metering, não-conectada→central+mete, assinatura lança→central, ambos falham→degradado).

Deploy: rotina do engine (sem web). Sem enable: ativa por conexão de assinatura.

🤖 Generated with Claude Code

BrunooMoniz and others added 2 commits June 19, 2026 14:31
Adiciona campo opcional effort (low|medium|high) às opts de callSubscription.
Em modelos capazes (supportsEffort) usa opts.effort ?? "high" no
output_config.effort; default INALTERADO = "high" e temperature segue omitido.
Ignorado em modelos não-capazes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Quando a conta tem assinatura Claude conectada, /portal/ask gera a resposta
com os créditos do próprio usuário (callSubscription, effort "low", model
ASK_SUB_MODEL=claude-opus-4-8), igual ao extrator de memória.

Helper generateAnswer com ordem de fallback fail-safe (rota VIVA, sem gate):
  1. seam de teste (deps.complete) — preserva os testes existentes
  2. assinatura (createditos do usuário) — NÃO metered, token nunca logado
  3. central (nossa chave ASK_MODEL) — único caminho metered (recordLlmUsage)
Se a assinatura falha (reauth/rate-limit/rede), cai no central; se o central
também falha, propaga pro caller (canned no meta, degradado no search).

accountId sempre vem da sessão (res.locals); classifyIntent segue central/barato.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@BrunooMoniz BrunooMoniz merged commit 095a0c9 into main Jun 19, 2026
7 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant