Skip to main content
O ChatCLI suporta streaming em tempo real de respostas de LLM, exibindo o texto character-by-character conforme ele e gerado pela API. Isso melhora significativamente a experiencia do usuário, eliminando a espera por respostas completas.

Interface StreamingClient

O streaming e implementado como uma interface opcional que provedores podem adotar:
A detecção e automatica via type assertion — provedores que implementam StreamingClient recebem streaming automaticamente:
Provedores que não implementam StreamingClient continuam funcionando normalmente. O ChatCLI faz fallback para SendPrompt (resposta completa) automaticamente.

StreamChunk

Cada chunk do streaming carrega:

Contrato de Streaming

  • O canal retorna zero ou mais chunks de texto
  • O chunk final tem Done=true e pode incluir Usage e StopReason
  • Se ocorrer erro, um chunk com Error e enviado e o canal fecha
  • O canal fecha após o chunk final ou erro
  • O caller pode cancelar via contexto

Provedores com Suporte


Stream Watchdog

O Stream Watchdog monitora o stream para detectar stalls (interupcoes sem dados) e prevenir que o ChatCLI fique travado esperando indefinidamente:
Ambos os timers sao resetados a cada chunk recebido. Se o provedor parar de enviar dados por 90 segundos, o watchdog interrompe o stream e retorna o texto já acumulado.

Configuração do Watchdog

Em redes lentas ou com provedores que tem alta latência entre chunks, aumente o timeout para evitar interrupcoes prematuras. O padrão de 90 segundos e suficiente para a maioria dos cenarios.

Fallback para Não-Streaming

Quando o streaming não esta disponível (provedor não suporta ou erro na conexão), o ChatCLI faz fallback automático:
A função DrainStream permite converter um stream em resposta completa quando necessário:

Integração com TUI

No modo interativo (Bubble Tea), o streaming integra-se diretamente com o renderizador:
  • Cada chunk e emitido como evento via TUIEmitter
  • O modelo Bubble Tea atualiza a view incrementalmente
  • Markdown e renderizado progressivamente via Glamour
  • A barra de status mostra o estado do streaming em tempo real
No modo one-shot (-p), o streaming e desabilitado e DrainStream e usado para coletar a resposta completa antes de imprimir.

Próximos Passos

Recuperação de Contexto

O que acontece quando max_tokens e atingido durante streaming.

Provider Fallback

Chain de fallback entre provedores com e sem streaming.

Tool Use Nativo

Streaming com tool calls nativas.

UI de Progresso

Indicadores visuais durante streaming do agente.