Pareamento de Tool Results
Todatool_use (chamada de ferramenta pelo modelo) deve ter um tool_result correspondente no historico de conversacao. Quando essa correspondencia quebra — por interrupcao, timeout ou erro silencioso — a API rejeita o historico.
O sistema EnsureToolResultPairing valida e repara automaticamente:
| Problema | Acao de Reparo |
|---|---|
tool_use sem tool_result (orfao) | Injeta resultado sintetico de erro |
tool_result sem tool_use (orfao) | Remove do historico |
IDs de tool_use duplicados | Mantém apenas a primeira ocorrencia |
Resultados Sinteticos
Quando uma tool_use nao tem resultado correspondente, o ChatCLI injeta:Validacao em 3 Fases
Coleta de IDs
Percorre todo o historico coletando IDs de
tool_use (de mensagens assistant) e IDs de tool_result (de mensagens tool).Deteccao de Desalinhamentos
Compara os dois conjuntos de IDs. Tool uses sem resultado sao “missing”. Tool results sem uso sao “orphans”. IDs duplicados sao marcados para dedup.
Orcamento de Resultados (Budget Enforcement)
Resultados de ferramentas como leitura de arquivos grandes ou saida de comandos podem consumir rapidamente a janela de contexto. O sistema de orcamento limita o tamanho agregado em dois niveis:| Nivel | Limite | Variavel de Ambiente | Default |
|---|---|---|---|
| Por resultado | Tamanho maximo de um unico resultado | CHATCLI_TOOL_RESULT_MAX_CHARS | 20.000 chars |
| Por turno | Tamanho agregado de todos os resultados no turno | CHATCLI_TOOL_RESULT_BUDGET_CHARS | 200.000 chars |
Como Funciona o Enforcement
O orcamento e aplicado em duas passadas:- Passada 1: Por Resultado
- Passada 2: Por Turno
Cada resultado individual e verificado contra
DefaultPerResultMaxChars (20KB). Se exceder, o conteudo completo e salvo em disco e substituido por um preview:Persistencia em Disco
Resultados truncados sao salvos em arquivos temporarios em/tmp/chatcli-tool-results/:
Preview: Head + Tail
O preview mantem o inicio e o final do resultado para maximizar utilidade:| Componente | Tamanho |
|---|---|
| Head (inicio) | 4.000 chars (corta na ultima quebra de linha) |
| Referencia | Caminho do arquivo em disco |
| Tail (final) | 1.000 chars (corta na primeira quebra de linha) |
Microcompactacao Progressiva
A microcompactacao reduz progressivamente o tamanho de resultados antigos de ferramentas conforme a conversa avanca, sem perder informacao critica:| Idade do Resultado | Acao | Detalhes |
|---|---|---|
| Turno atual e anterior | Sem alteracao | Resultados preservados integralmente |
| 2+ turnos atras | Truncado | Head (2.000 chars) + tail (500 chars) |
| 4+ turnos atras | Resumido | Uma linha descritiva: [Old tool result cleared — 450 lines, 28K chars, Go source] |
Deteccao de Tipo de Conteudo
O resumo identifica automaticamente o tipo do conteudo para contexto:| Conteudo | Tipo Detectado |
|---|---|
Comeca com { ou [ | JSON |
Contem package | Go source |
Contem def | Python source |
Contem function | JavaScript source |
Comeca com diff ou --- | diff |
Comeca com commit | git log |
| Outros | text |
Configuracao da Microcompactacao
| Variavel | Descricao | Default |
|---|---|---|
CHATCLI_MICROCOMPACT_TRUNCATE_TURNS | Turnos antes de truncar | 2 |
CHATCLI_MICROCOMPACT_SUMMARIZE_TURNS | Turnos antes de resumir | 4 |
Apenas resultados com mais de 3.000 chars sao compactados. Resultados pequenos sao sempre preservados. Resultados de ferramentas de escrita e execucao sao preservados por conterem informacoes criticas de erro.
Fluxo Completo
O gerenciamento de resultados e aplicado nesta ordem durante o loop do agente:Configuracao Completa
| Variavel de Ambiente | Descricao | Default |
|---|---|---|
CHATCLI_TOOL_RESULT_BUDGET_CHARS | Orcamento agregado por turno | 200.000 |
CHATCLI_TOOL_RESULT_MAX_CHARS | Tamanho maximo por resultado | 20.000 |
CHATCLI_MICROCOMPACT_TRUNCATE_TURNS | Turnos para iniciar truncamento | 2 |
CHATCLI_MICROCOMPACT_SUMMARIZE_TURNS | Turnos para iniciar sumarizacao | 4 |
Proximos Passos
Recuperacao de Contexto
O que acontece quando mesmo com orcamento o contexto transborda.
Recuperacao de JSON
Como argumentos malformados sao corrigidos antes da execucao.
Cost Tracking
Monitore o consumo de tokens incluindo tool results.
Modo Agent
O loop ReAct que gera e processa tool calls.