- evitar que respostas answer_user ou ask_missing_fields do modelo interrompam compras ja caracterizadas
- manter o order_flow como caminho deterministico quando cpf, orcamento ou perfil ja permitem avancar
- preservar a arquitetura com o modelo decidindo o turno e o backend apenas coordenando a continuidade
- cobrir com teste de regressao o caso reproduzido no servidor para compra com orcamento e cpf
- aceitar aliases de intent retornados pelo Vertex como place_order e create_order
- converter aliases de campos faltantes como modelo_carro para vehicle_id no fluxo de compra
- redirecionar decisoes de compra quase-validas para collect_order_create em vez de cair no fallback
- cobrir com testes os formatos divergentes retornados localmente e no servidor
- adicionar uma extracao estruturada focada em orcamento e perfil de veiculo para fluxos de vendas
- acionar esse enriquecimento apenas quando o turno ja for de compra e os campos vierem vazios
- manter o backend alinhado ao contrato do modelo sem reintroduzir heuristicas locais
- cobrir o enriquecimento com teste de contrato para o fluxo de decisao
- 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
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.
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.