- remover o fallback semantico local de orcamento e perfil do fluxo de vendas
- enriquecer o turno sempre com uma extracao dedicada de entidades apos a decisao estruturada
- endurecer os prompts para obrigar o modelo a preencher orcamento_max e perfil_veiculo em pedidos de compra
- manter o fluxo alinhado ao contrato do modelo sem reintroduzir regex conversacional
- adicionar fallback tecnico para capturar orcamento diretamente da mensagem de compra
- inferir perfil de veiculo no fluxo de vendas quando a memoria generica vier incompleta
- garantir a listagem automatica de estoque mesmo quando o modelo nao preencher orcamento_max
- cobrir o cenario com teste focado de pedido sem hints estruturados do llm
- invalidar resultados antigos quando orcamento ou perfil de veiculo mudarem durante a compra
- relistar o estoque automaticamente ao iniciar um novo pedido com contexto atualizado
- preservar drafts de pedido em erros recuperaveis e limpar apenas o campo invalido
- remover IDs da vitrine de estoque e orientar a escolha pelo numero da opcao exibida
- normalizar HTTPException em um contrato estruturado com code, message, retryable e field
- preservar drafts de revisao em erros recuperaveis sem perder o restante do contexto
- delegar a resposta final de tools ao modelo com formatter deterministico apenas como fallback
- registrar request_id, conversation_id e tempos de llm/tool para rastrear cada turno
- mover regras de estoque, credito, pedidos e revisao para servicos de dominio dedicados
- manter handlers como camada fina de adaptacao para o ToolRegistry
- centralizar utilitarios compartilhados e o contrato estruturado de erro das tools
Passa a aproveitar orcamento e perfil guardados na conversa para sugerir estoque quando a compra ainda nao tem veiculo definido, preservando a selecao na memoria e guiando o usuario ate o fechamento do pedido.
Tambem impede que veiculos reservados continuem aparecendo como disponiveis, devolve o status do veiculo na resposta deterministica do pedido e amplia os testes de regressao dos fluxos de compra e cancelamento.
Introduz o contrato TurnDecision e a extracao estruturada por turno no planner para que intent, domain, action, selecao e resposta venham do modelo, com validacao Pydantic e fallback previsivel quando o JSON vier invalido.
Tambem extrai a normalizacao tecnica para um modulo dedicado e passa a usar regex apenas para formalizar CPF, placa, protocolos, datas e outros formatos estruturados, reduzindo heuristicas semanticas dentro do normalizador, da policy e dos fluxos de revisao.
Adiciona comentarios objetivos nos servicos e componentes centrais para deixar explicitas as responsabilidades de integracao com LLM, estado conversacional, factories, registries e helpers de usuario.
A mudanca e apenas documental e segue a linha do projeto de explicar a arquitetura no proprio codigo sem alterar o comportamento em runtime.
Passa a criar pedidos de compra a partir de um veiculo concreto do estoque selecionado na conversa, reaproveitando a ultima consulta e exibindo o modelo escolhido na resposta final.
Tambem endurece a orquestracao contra vazamento de contexto entre compra, cancelamento e revisao, preserva o estado necessario no fluxo e adiciona testes de regressao para os cenarios validados no Telegram.
Introduz a abstracao de repositorio de estado conversacional e a implementacao com Redis para suportar persistencia entre reinicios e execucao em multiplas instancias.
Tambem adiciona configuracoes de ambiente, dependencias e suporte local via Docker Compose para alternar entre backend em memoria e Redis de forma explicita.
Impede que consultas de estoque caiam no fluxo de compra, evita reaproveitamento implícito de CPF para criar pedidos e mantém drafts quando a execução da tool falha.
Também preserva corretamente o estado de revisão, limpando o draft apenas quando a operação conclui com sucesso ou quando a confirmação pendente passa a ser o estado principal.
Move a normalização, o planejamento de mensagens, a política conversacional e a execução de tools para módulos dedicados.
Reduz o acoplamento do OrquestradorService e prepara a base para evoluções futuras com menos risco de regressão.
- remove as rotas de chat, tools e mock que nao participam do fluxo atual via Telegram
- elimina dependencias auxiliares associadas a essas rotas
- simplifica o startup da aplicacao para operar sem registradores HTTP do orquestrador
- reorganiza os testes por objetivos de validacao do orquestrador
- adiciona roteiros para fila de pedidos, troca de contexto, controle de conversa e conflitos de revisao
- amplia cobertura manual para parsing de datas, protocolos e regressao de memoria curta
- adiciona tools de orquestracao para limpar contexto, descartar fila, cancelar fluxo e continuar pedidos pendentes
- prioriza a decisao do LLM para comandos globais antes dos slot fillings ativos
- melhora selecao entre pedidos concorrentes e resposta deterministica das tools de orquestracao
- estrutura conflitos de horario de revisao para facilitar confirmacao posterior
- reaproveita CPF da memoria/perfil do usuario no fluxo de compra
- cria servico mock para hidratar customer e vincular users.cpf ao informar um CPF valido
Reescreve o README para refletir o estado real do projeto, incluindo stack atual, estrutura reorganizada de services, fluxo conversacional do /chat, tools implementadas, bancos utilizados, endpoints disponiveis e integracao com Telegram.
Tambem documenta limitacoes atuais do sistema, como memoria conversacional volatil e ausencia de persistencia de historico entre reinicializacoes, mantendo a documentacao coerente com a implementacao atual.
Redistribui os arquivos de app/services em modulos mais claros, separando orchestration, flows, ai, tools e user sem alterar a logica de negocio ou o comportamento funcional do sistema.
Ajusta os imports afetados em rotas, startup da aplicacao e integracao com Telegram para refletir a nova organizacao interna e manter o fluxo atual intacto.
Objetivos da limpeza:
- reduzir a sensacao de pasta deposito em app/services
- tornar o papel de cada modulo mais explicito
- melhorar manutencao e navegacao do projeto
- preparar o codigo para crescimento futuro com menor acoplamento estrutural
- unifica plano de mensagem via LLM (roteamento + entidades por pedido)
- adiciona fallback de extração separada apenas quando o plano vier sem dados úteis
- reduz reprocessamento no mesmo turno com fila explícita e avanço por 'continuar'
- melhora UX de fila com aviso determinístico de pedidos enfileirados
- amplia intents de revisão: listagem, cancelamento e remarcação
- adiciona campos dedicados para gestão de revisão (protocolo, nova_data_hora, motivo)
- implementa slot filling para cancelar/remarcar revisão com prompts de faltantes
- reforça regras de troca de contexto quando há fluxo de revisão aberto
- adiciona memória curta do último pacote de revisão com TTL (20 min)
- implementa confirmação de reuso de pacote para novo agendamento
- quando reuso confirmado, coleta apenas data/hora e mantém demais dados
- preserva arquitetura: LLM decide e extrai; sistema normaliza, valida, mantém estado e executa tools
✅ Benefícios:
- maior robustez em cenários ambíguos de revisão
- melhor continuidade entre assuntos sem perder contexto
- menor atrito no reagendamento de revisões semelhantes
- inicializa Vertex AI uma única vez por processo
- adiciona cache de modelos GenerativeModel por nome
- adiciona cache da conversão de tools para formato Vertex
- executa send_message em asyncio.to_thread para não bloquear o loop async
- adiciona método warmup no LLMService (best effort)
- executa warmup no startup da API FastAPI
- executa warmup no startup do Telegram Satellite
🎯 Resultado esperado:
- menor latência no primeiro request (cold start)
- menor overhead por requisição subsequente
- melhor throughput em cenários concorrentes
- centraliza configuracoes do orquestrador em orchestrator_config.py (TTLs, campos obrigatorios, respostas deterministicas e low-value)
- migra extracao de entidades e intents para o modelo, mantendo no codigo apenas normalizacao/validacao e execucao
- troca heuristicas locais de intencao/roteamento por contratos de intents e roteamento multiassunto via LLM
- melhora observabilidade da extracao com logs para payload vazio/invalido e falhas do extrator
- corrige continuidade de contexto no slot-filling de revisao e normaliza datas relativas (hoje/amanha)
- adiciona fluxos incrementais para criar/cancelar pedido e integra com fila de assuntos
- implementa memoria compartilhada + memoria de trabalho por assunto (estilo nova aba) para reduzir contaminacao entre contextos
- evita interromper fluxo ativo ao receber mensagem com dois assuntos
- enfileira assuntos secundarios e avanca automaticamente apos concluir o atual
- remove metodos legados sem uso no orquestrador (roteamento antigo por regex)
- remove metodo sem uso em UserRepository para reduzir codigo morto
- remove arquivos nao utilizados no modelo atual de hospedagem: app.yaml, cloudbuild.yaml, deploy.sh, setup-gcp.sh, setup-database.sh e .gcloudignore
- remove documentacoes antigas de infraestrutura GCP/Cloud SQL (GUIA_COMPLETO_CONFIGURE_E_DEPLOY.md e CLOUD_SQL_PROXY.md)
- atualiza README para refletir o fluxo vigente em servidor da empresa, removendo referencias a Cloud Run/Cloud Build
- limpa .env.example removendo blocos de configuracao legados de Cloud SQL/Cloud Run
- ajusta comentario legado em app/core/settings.py, mantendo compatibilidade sem vincular a Cloud Run
- preserva configuracoes e orientacoes relacionadas ao Vertex AI
- adiciona coleta incremental de dados (slot filling) por usuario para placa, data/hora, modelo, ano, km e historico de revisao, evitando perda de contexto entre mensagens
- implementa extracao auxiliar por regex para interpretar respostas curtas e completar o payload de revisao sem depender totalmente do modelo
- passa a bloquear conflito global de agenda no mesmo horario (independente de usuario/veiculo) e sugerir proximo horario disponivel
- adiciona confirmacao de sugestao pendente (ex.: "pode") e remarca??o quando o cliente recusa o horario sugerido (incluindo casos com apenas novo horario)
- amplia a tool de agendar revisao com novos campos obrigatorios e calculo de valor estimado da revisao com base em modelo, ano, km e fidelidade de revisoes anteriores
- atualiza schemas e rota mock para refletir o novo contrato de agendamento
- endurece o satelite do Telegram com prevencao de instancia duplicada e descarte de backlog no startup para reduzir respostas repetidas
- Limpeza de comentários e padronização das variáveis em .env
- Atualiza MOCKAROO_BASE_URL para uso do plano gratuito
- Adiciona service-account-key.json ao .gitignore