bugfixes: router stickness vs transaction workflow parameters

This commit is contained in:
2026-08-20 22:58:25 -03:00
parent 57df723a24
commit 0a72afb94e
177 changed files with 534 additions and 3 deletions

View File

@@ -0,0 +1,30 @@
# Correção: escape de estado transacional / mudança de intenção
Correção aplicada em 2026-08-20 para impedir que uma sessão fique presa em `COLLECTING_PARAMETERS` ou `AWAITING_CONFIRMATION` quando o usuário muda explicitamente de assunto.
## Comportamento corrigido
Antes:
1. uma transação entrava em `COLLECTING_PARAMETERS`;
2. `next_state` forçava o mesmo agente via `state_policies`;
3. toda mensagem seguinte era tratada como tentativa de preencher o parâmetro faltante;
4. uma nova intenção como `quais sao meus servicos` permanecia presa no fluxo anterior.
Agora:
- o `EnterpriseRouter` verifica mudança explícita de intenção antes de aplicar o lock de estado;
- keyword explícita tem prioridade;
- quando necessário, o LLM router pode detectar mudança com confiança >= `router.confidence_threshold`;
- a decisão recebe `metadata.transaction_interruption=intent_shift`;
- o runtime encerra a transação pendente como `CANCELLED`, limpa `next_state`, parâmetros e latches, e prossegue com a nova intent;
- cancelamentos explícitos como `cancele essa operação anterior` funcionam também durante `COLLECTING_PARAMETERS`.
## Testes adicionados
- mudança de intent durante `COLLECTING_PARAMETERS`;
- resposta curta/baixa confiança permanece na transação;
- cancelamento explícito durante coleta de parâmetros;
- limpeza do estado transacional antes de executar a nova intent.
Testes focados: 19 passed.

View File

@@ -0,0 +1,32 @@
# Transaction parameter precedence fix
Correção para a regressão em que uma resposta curta que preenchia um parâmetro pendente (ex.: `R$ 71,99` para `valor`) era classificada pelo LLM Router como uma nova intent e interrompia a transação.
## Regra aplicada
Durante `COLLECTING_PARAMETERS` a ordem passa a ser:
1. resposta compatível com parâmetro pendente -> mantém a política de estado e continua a transação;
2. cancelamento explícito -> cancela a transação;
3. nova intenção clara/pergunta explícita -> interrompe a transação e volta ao roteamento normal;
4. caso ambíguo -> permanece em clarificação.
Exemplo corrigido:
```text
não fiz essa contratação TIM CTRL Redes Sociais 8.0
-> informe valor
R$ 71,99
-> valor=71.99; continua contestar_cobranca; executa pré-validação
```
A mensagem `R$ 71,99` não pode mais virar `contas_invoice_explanation` enquanto `valor` estiver pendente.
## Testes
Foram adicionados testes para:
- valor monetário com LLM sugerindo outra intent;
- entidade curta como resposta de parâmetro;
- pergunta clara durante coleta ainda interrompendo a transação;
- regressões existentes de intent-shift e transactional tool flow.

View File

@@ -179,6 +179,8 @@ src/agent_framework/persistence/__init__.py
src/agent_framework/persistence/mongodb_store.py src/agent_framework/persistence/mongodb_store.py
src/agent_framework/persistence/oracle_store.py src/agent_framework/persistence/oracle_store.py
src/agent_framework/persistence/sqlite_store.py src/agent_framework/persistence/sqlite_store.py
src/agent_framework/presentation/__init__.py
src/agent_framework/presentation/renderers.py
src/agent_framework/rag/__init__.py src/agent_framework/rag/__init__.py
src/agent_framework/rag/embedding_provider.py src/agent_framework/rag/embedding_provider.py
src/agent_framework/rag/graph_store.py src/agent_framework/rag/graph_store.py

Some files were not shown because too many files have changed in this diff Show More