Interface StreamingClient
O streaming e implementado como uma interface opcional que provedores podem adotar:StreamingClient recebem streaming automaticamente:
Provedores que nao implementam
StreamingClient continuam funcionando normalmente. O ChatCLI faz fallback para SendPrompt (resposta completa) automaticamente.StreamChunk
Cada chunk do streaming carrega:| Campo | Tipo | Descricao |
|---|---|---|
Text | string | Texto incremental neste chunk (pode ser vazio) |
Done | bool | true no chunk final |
Usage | *UsageInfo | Dados de uso de tokens (apenas no chunk final) |
StopReason | string | Razao da parada: end_turn, max_tokens, tool_use |
Error | error | Erro durante streaming (termina o stream) |
Contrato de Streaming
- O canal retorna zero ou mais chunks de texto
- O chunk final tem
Done=truee pode incluirUsageeStopReason - Se ocorrer erro, um chunk com
Errore enviado e o canal fecha - O canal fecha apos o chunk final ou erro
- O caller pode cancelar via contexto
Provedores com Suporte
| Provedor | Streaming | Observacoes |
|---|---|---|
| Anthropic (API Key) | Sim | Streaming nativo via Messages API |
| Anthropic (OAuth) | Sim | Streaming via token OAuth |
| OpenAI | Sim | Streaming via Chat Completions |
| ZAI (Zhipu AI) | Sim | Streaming compativel com OpenAI |
| MiniMax | Sim | Streaming compativel com OpenAI |
| OpenRouter | Sim | Streaming via API OpenAI-compatible |
| Google (Gemini) | Nao | Fallback para resposta completa |
| xAI (Grok) | Nao | Fallback para resposta completa |
| GitHub Models | Nao | Fallback para resposta completa |
| Ollama | Nao | Fallback para resposta completa |
Stream Watchdog
O Stream Watchdog monitora o stream para detectar stalls (interupcoes sem dados) e prevenir que o ChatCLI fique travado esperando indefinidamente:- Timeouts
- Resultado
| Timer | Duracao | Acao |
|---|---|---|
| Warning | 45 segundos | Loga aviso de stall no log |
| Idle Timeout | 90 segundos | Aborta stream e retorna conteudo parcial |
Configuracao do Watchdog
| Variavel de Ambiente | Descricao | Default |
|---|---|---|
CHATCLI_STREAM_IDLE_TIMEOUT_SECONDS | Timeout de idle em segundos | 90 |
Fallback para Nao-Streaming
Quando o streaming nao esta disponivel (provedor nao suporta ou erro na conexao), o ChatCLI faz fallback automatico:DrainStream permite converter um stream em resposta completa quando necessario:
Integracao 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.Proximos Passos
Recuperacao 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.