Sem KYC — sem documento de identidade, sem selfie, sem documentos. Pague com cripto: BTC, USDT, USDC, ETH, SOL, LTC
Idioma: Português
Obter uma chave de API

Docs · streaming

Respostas em streaming: a resposta conforme ela é escrita

Com stream: true, a resposta chega em pequenos pedaços conforme o modelo a escreve, do jeito que as interfaces de chat mostram o texto aparecendo. O formato é o da OpenAI: server-sent events, um chunk JSON por evento, depois [DONE].

Última atualização: · 3 min de leitura

Resposta rápida

Como faço streaming de um chat completion a partir de LLMwithCrypto?

Adicione "stream": true ao corpo de POST https://llmwithcrypto.com/api/v1/chat/completions. LLMwithCrypto então responde com server-sent events: cada linha data: contém um chat.completion.chunk com um trecho de texto em delta.content, e o stream termina com data: [DONE]. Adicione "stream_options": {"include_usage": true} para receber as contagens de tokens em um último chunk. Isso funciona em todos os modelos, conforme documentado em 23 de outubro de 2026.

Por que fazer streaming, afinal?

Para pessoas, porque as primeiras palavras aparecem em instantes, em vez de só depois que a resposta inteira é escrita. Uma resposta longa de um modelo grande pode levar muitos segundos para terminar; em streaming, o leitor começa a ler na hora.

Para programas importa menos: um script que precisa do texto completo não ganha nada com streaming e tem mais parsing para fazer. Faça streaming quando um humano estiver acompanhando e envie uma requisição normal caso contrário. O preço é o mesmo dos dois jeitos. Você paga por token a partir do seu saldo: tokens de entrada e de saída são contados pelo tokenizer do próprio modelo e cobrados ao preço daquele modelo por 1M de tokens. Uma chamada que termina em erro não custa nada.

curl: -N mantém a conexão sem buffer
curl -sN "https://llmwithcrypto.com/api/v1/chat/completions" \
  -H "Authorization: Bearer $LLMWITHCRYPTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4.1-flash",
    "messages": [{"role": "user", "content": "Write a haiku about latency."}],
    "stream": true,
    "stream_options": {"include_usage": true},
    "max_tokens": 120
  }'
Python: imprima o texto conforme ele chega
import os

from openai import OpenAI

client = OpenAI(
    base_url="https://llmwithcrypto.com/api/v1",
    api_key=os.environ["LLMWITHCRYPTO_API_KEY"],
)

stream = client.chat.completions.create(
    model="deepseek-v4.1-flash",
    messages=[{"role": "user", "content": "Write a haiku about latency."}],
    stream=True,
    stream_options={"include_usage": True},
    max_tokens=120,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:
        print("\n", chunk.usage.prompt_tokens, "in,", chunk.usage.completion_tokens, "out")
Node.js: for await sobre os chunks
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://llmwithcrypto.com/api/v1',
  apiKey: process.env.LLMWITHCRYPTO_API_KEY,
});

const stream = await client.chat.completions.create({
  model: 'deepseek-v4.1-flash',
  messages: [{ role: 'user', content: 'Write a haiku about latency.' }],
  stream: true,
  stream_options: { include_usage: true },
  max_tokens: 120,
});
for await (const chunk of stream) {
  const text = chunk.choices[0]?.delta?.content;
  if (text) process.stdout.write(text);
  if (chunk.usage) console.log(`\n${chunk.usage.prompt_tokens} in, ${chunk.usage.completion_tokens} out`);
}

Como o stream aparece na rede?

Cada evento é uma linha começando com data: , seguida de uma linha em branco. O primeiro chunk normalmente carrega o role, os seguintes alguns caracteres de content cada, e o chunk com um finish_reason fecha a resposta. Com include_usage, segue mais um chunk com um array choices vazio e o objeto usage. O stream sempre termina com data: [DONE]. Os ids e contagens abaixo são ilustrativos.

Server-sent events de uma resposta curta (ilustrativo)
data: {"id":"chatcmpl-5a1e","object":"chat.completion.chunk","created":1792742400,"model":"deepseek-v4.1-flash","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}

data: {"id":"chatcmpl-5a1e","object":"chat.completion.chunk","created":1792742400,"model":"deepseek-v4.1-flash","choices":[{"index":0,"delta":{"content":"Packets"},"finish_reason":null}]}

data: {"id":"chatcmpl-5a1e","object":"chat.completion.chunk","created":1792742400,"model":"deepseek-v4.1-flash","choices":[{"index":0,"delta":{"content":" cross the"},"finish_reason":null}]}

data: {"id":"chatcmpl-5a1e","object":"chat.completion.chunk","created":1792742400,"model":"deepseek-v4.1-flash","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: {"id":"chatcmpl-5a1e","object":"chat.completion.chunk","created":1792742400,"model":"deepseek-v4.1-flash","choices":[],"usage":{"prompt_tokens":14,"completion_tokens":19,"total_tokens":33}}

data: [DONE]

E se o stream quebrar?

Um erro encontrado antes do primeiro token, como uma chave errada ou um saldo vazio, volta como um erro HTTP normal com um corpo JSON, não como um stream; a página de erros os lista. Um erro durante a geração encerra o stream antes do fim, sem um finish_reason.

Se você mesmo fechar a conexão, a geração para. Você então paga pela entrada e pelos tokens já gerados, como em qualquer chamada. Seu código deve tratar um stream que termina sem um finish_reason e sem [DONE] como incompleto, e enviar a requisição novamente se precisar da resposta completa.

Streaming: perguntas frequentes

Fazer streaming custa mais?

Não. Os mesmos tokens são cobrados pelo mesmo preço. Você paga por token a partir do seu saldo: tokens de entrada e de saída são contados pelo tokenizer do próprio modelo e cobrados ao preço daquele modelo por 1M de tokens. Uma chamada que termina em erro não custa nada.

Posso fazer streaming com tool calling?

Sim, nos modelos que suportam tools: o nome e os argumentos da função chegam em pedaços em delta.tool_calls e precisam ser juntados antes do uso. A página de tool calling mostra o loop sem streaming, que é mais simples para começar.

Por que não recebo uso em uma chamada com streaming?

Adicione "stream_options": {"include_usage": true}. Sem isso, um stream não traz contagem de tokens; o dashboard ainda as mostra.

DeepSeek V4 Pro a partir de $1.254 por 1M de tokens de entrada · sem KYC

Obter uma chave de API