Graph
src.graph
Grafo de fluxo de atendimento do Pede AI.
Define o estado compartilhado e os nós de processamento para o grafo de atendimento (LangGraph).
Example
MODOS = Literal['ocioso', 'coletando', 'clarificando', 'confirmando', 'finalizado']
module-attribute
Literal com todos os modos validos do fluxo de atendimento.
Renomeado de 'ETAPAS' para 'MODOS' no dispatcher. 'clarificando_variante' → 'clarificando'.
ACOES = Literal['adicionar_item', 'remover_item', 'trocar_variante', 'sem_entidade']
module-attribute
Literal com todas as acoes validas do dispatcher.
State
Bases: TypedDict
Estado compartilhado entre os nos do grafo de atendimento.
Attributes:
| Name | Type | Description |
|---|---|---|
mensagem_atual |
str
|
Ultima mensagem recebida do usuario. |
intent |
str
|
Intencao classificada da mensagem atual. |
confidence |
float
|
Confidence da classificacao (0-1). |
itens_extraidos |
list
|
Lista de dicts de itens extraidos da mensagem. |
carrinho |
list
|
Lista de dicts de itens adicionados ao pedido. |
fila_clarificacao |
list
|
Fila de dicts de itens que precisam de clarificacao. |
modo |
MODOS
|
Modo atual do fluxo de atendimento (renomeado de 'etapa'). |
resposta |
str
|
Resposta gerada para o usuario. |
tentativas_clarificacao |
int
|
Contador de tentativas para o item atual. |
acao |
ACOES
|
Decisao do dispatcher (novo). |
origem_intent |
str
|
Origem da classificacao: 'contexto'|'lookup'|'rag_forte'|'llm_rag'|'llm_fixo' (novo). |
dados_extracao |
dict
|
Output de extrair_itens_troca() ou carrinho matches (novo). |
criar_graph(checkpointer: SqliteSaver, classificador: ClassificadorIntencoes) -> StateGraph
Constroi e compila o grafo de atendimento.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpointer
|
SqliteSaver
|
Checkpointer para persistencia de estado (SqliteSaver). |
required |
classificador
|
ClassificadorIntencoes
|
Instancia de ClassificadorIntencoes injetada. |
required |
Returns:
| Type | Description |
|---|---|
StateGraph
|
Grafo compilado pronto para uso com invoke(). |
Source code in src/graph/builder.py
node_clarificacao(state: State) -> RetornoNode
Processa resposta do usuario durante clarificacao de variante.
Source code in src/graph/nodes.py
node_extrator(state: State) -> RetornoNode
Extrai itens do cardapio da mensagem do usuario.
Source code in src/graph/nodes.py
node_handler_cancelar(state: State) -> RetornoNode
node_handler_carrinho(state: State) -> RetornoNode
node_handler_confirmar(state: State) -> RetornoNode
node_handler_pedir(state: State) -> RetornoNode
Processa itens extraidos e os adiciona ao carrinho.
Source code in src/graph/nodes.py
node_handler_saudacao(state: State) -> RetornoNode
node_router(state: State) -> RetornoNode
Classifica a intencao da mensagem e atualiza o estado.
Versao standalone para testes — usa _classificar_intencao que pode ser mockado.
Source code in src/graph/nodes.py
node_verificar_modo(state: State) -> RetornoNode
No de verificacao de modo do fluxo.
Apenas passa adiante sem modificar o estado. A decisao
de qual caminho seguir e feita pela edge condicional
_decidir_entrada no builder.
Source code in src/graph/nodes.py
src.graph.builder
Builder do grafo LangGraph.
Constroi e compila o grafo de atendimento com nodes, arestas condicionais e roteamento por intent.
Example
criar_graph(checkpointer: SqliteSaver, classificador: ClassificadorIntencoes) -> StateGraph
Constroi e compila o grafo de atendimento.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpointer
|
SqliteSaver
|
Checkpointer para persistencia de estado (SqliteSaver). |
required |
classificador
|
ClassificadorIntencoes
|
Instancia de ClassificadorIntencoes injetada. |
required |
Returns:
| Type | Description |
|---|---|
StateGraph
|
Grafo compilado pronto para uso com invoke(). |
Source code in src/graph/builder.py
src.graph.state
Estado compartilhado do grafo de atendimento.
Define o TypedDict State utilizado por todos os nos do grafo
LangGraph para compartilhar informacoes durante o fluxo de atendimento.
Example
MODOS = Literal['ocioso', 'coletando', 'clarificando', 'confirmando', 'finalizado']
module-attribute
Literal com todos os modos validos do fluxo de atendimento.
Renomeado de 'ETAPAS' para 'MODOS' no dispatcher. 'clarificando_variante' → 'clarificando'.
ACOES = Literal['adicionar_item', 'remover_item', 'trocar_variante', 'sem_entidade']
module-attribute
Literal com todas as acoes validas do dispatcher.
State
Bases: TypedDict
Estado compartilhado entre os nos do grafo de atendimento.
Attributes:
| Name | Type | Description |
|---|---|---|
mensagem_atual |
str
|
Ultima mensagem recebida do usuario. |
intent |
str
|
Intencao classificada da mensagem atual. |
confidence |
float
|
Confidence da classificacao (0-1). |
itens_extraidos |
list
|
Lista de dicts de itens extraidos da mensagem. |
carrinho |
list
|
Lista de dicts de itens adicionados ao pedido. |
fila_clarificacao |
list
|
Fila de dicts de itens que precisam de clarificacao. |
modo |
MODOS
|
Modo atual do fluxo de atendimento (renomeado de 'etapa'). |
resposta |
str
|
Resposta gerada para o usuario. |
tentativas_clarificacao |
int
|
Contador de tentativas para o item atual. |
acao |
ACOES
|
Decisao do dispatcher (novo). |
origem_intent |
str
|
Origem da classificacao: 'contexto'|'lookup'|'rag_forte'|'llm_rag'|'llm_fixo' (novo). |
dados_extracao |
dict
|
Output de extrair_itens_troca() ou carrinho matches (novo). |
RetornoNode
Bases: TypedDict
Tipo de retorno parcial dos nos do grafo.
Cada no retorna apenas as chaves que atualiza.
O LangGraph faz o merge com o State completo.
Campos identicos ao State — mantidos aqui para type safety
com total=False (todos opcionais).
src.graph.nodes
Nos de processamento do grafo de atendimento.
Cada funcao representa um no no grafo LangGraph, recebendo e retornando atualizacoes parciais do estado.
Example
node_router(state: State) -> RetornoNode
Classifica a intencao da mensagem e atualiza o estado.
Versao standalone para testes — usa _classificar_intencao que pode ser mockado.
Source code in src/graph/nodes.py
node_verificar_modo(state: State) -> RetornoNode
No de verificacao de modo do fluxo.
Apenas passa adiante sem modificar o estado. A decisao
de qual caminho seguir e feita pela edge condicional
_decidir_entrada no builder.
Source code in src/graph/nodes.py
node_clarificacao(state: State) -> RetornoNode
Processa resposta do usuario durante clarificacao de variante.
Source code in src/graph/nodes.py
node_extrator(state: State) -> RetornoNode
Extrai itens do cardapio da mensagem do usuario.
Source code in src/graph/nodes.py
node_handler_pedir(state: State) -> RetornoNode
Processa itens extraidos e os adiciona ao carrinho.
Source code in src/graph/nodes.py
node_handler_saudacao(state: State) -> RetornoNode
node_handler_carrinho(state: State) -> RetornoNode
node_handler_confirmar(state: State) -> RetornoNode
node_handler_cancelar(state: State) -> RetornoNode
node_handler_remover(state: State) -> RetornoNode
Processa remocao de itens do pedido.
node_handler_trocar(state: State) -> RetornoNode
Processa troca de variante de item no pedido.
node_dispatcher_modificar(state: State) -> RetornoNode
Decide qual ação executar para intent modificar_pedido.
Chama os extratores na ordem correta e roteia para a ação certa. Ordem de prioridade: troca > remoção > adição > sem_entidade.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
state
|
State
|
Estado atual do grafo. |
required |
Returns:
| Type | Description |
|---|---|
RetornoNode
|
RetornoNode com 'acao' e dados de extração preenchidos. |