mirror of
https://github.com/melgarafael/DeskcommCRM.git
synced 2026-10-02 09:34:46 +08:00
O debounce de rajada (mensagens do MESMO contato dentro da janela viram uma resposta só) era só a env do worker INBOUND_DEBOUNCE_MS (default 8000, global, invisível na tela, exige VPS). Agora vira campo opcional por agente em 'Freios de segurança': vazio = usa a env da instalação (regressão zero), 0 desliga a coalescência, teto de 60s clampa pelo leitor (debounceEfetivo). O drain lê a config do agente da conversa (loadConversationAgentConfig, mesma resolução do turno) e usa o debounce do agente no lugar do literal. DoD: migration 0498 + apêndice idempotente no baseline + linha no MANIFEST; leitor testado (default/env, campo, teto no limite); gate de consumidor de knob atendido.
lib/ai/
Placeholder. Implementação real virá da Spec 05 — IA Conversacional + RAG + Handoff.
Escopo previsto:
gateway.ts— wrapper Vercel AI Gateway (fallback de provedor; observability por tenant)agent.ts— orquestrador do chatbot por tenant (carrega config deai_agents)rag/ingest.ts— pipeline de ingestão (FAQ + política + catálogo Nuvemshop + conversas resolvidas)embed.ts— wrapper OpenAItext-embedding-3-largeretrieve.ts— query top-K emai_chunks(pgvector) + reranking
sentiment.ts— análise binária alta/baixa frustração via Haiku 4.5handoff.ts— política de transição bot → humano (threshold + audit emcrm_lead_activities.type='handoff_triggered')
Strings de modelo (canônicas)
"anthropic/claude-sonnet-4-6"— agente principal (atendimento)"anthropic/claude-haiku-4-5"— sentiment + classificação"openai/text-embedding-3-large"— embeddings RAG
Prefira sempre roteamento via Vercel AI Gateway. Import direto do SDK Anthropic só como fallback.