# Streaming response: jawaban saat ditulis

> Stream chat completion dengan server-sent events: stream: true, format chunk, penggunaan token di event terakhir, dan contoh dalam curl, Python dan Node.js.

- URL: https://llmwithcrypto.com/id/docs/streaming/
- Terakhir diperbarui: 2026-10-23
- Penerbit: LLMwithCrypto (https://llmwithcrypto.com)

Dengan `stream: true`, jawaban tiba dalam potongan kecil saat model menulisnya, seperti antarmuka chat menampilkan teks yang muncul. Formatnya format OpenAI: server-sent events, satu chunk JSON per event, lalu `[DONE]`.

**Jawaban singkat — Bagaimana cara melakukan streaming chat completion dari LLMwithCrypto?**

Tambahkan `"stream": true` ke body `POST https://llmwithcrypto.com/api/v1/chat/completions`. **LLMwithCrypto** lalu menjawab dengan server-sent events: setiap baris `data:` memuat `chat.completion.chunk` dengan sepotong teks di `delta.content`, dan stream berakhir dengan `data: [DONE]`. Tambahkan `"stream_options": {"include_usage": true}` untuk mendapatkan jumlah token di chunk terakhir. Ini berfungsi di setiap model, sebagaimana didokumentasikan pada 23 Oktober 2026.

## Mengapa perlu streaming sama sekali?

Untuk manusia, karena kata-kata pertama muncul seketika alih-alih setelah seluruh jawaban selesai ditulis. Jawaban panjang dari model besar bisa butuh banyak detik untuk selesai; dengan streaming, pembaca langsung mulai membaca.

Untuk program, ini kurang penting: skrip yang membutuhkan teks lengkap tidak mendapat apa pun dari streaming dan malah punya lebih banyak parsing. Lakukan streaming saat ada manusia yang menonton, dan kirim permintaan biasa jika tidak. Harganya sama saja. Anda membayar per token dari saldo Anda: token input dan output dihitung oleh tokenizer model itu sendiri dan ditagih sesuai harga model tersebut per 1M token. Panggilan yang berakhir dengan error tidak dikenai biaya.

*curl: -N menjaga koneksi tetap tidak ter-buffer*

```bash
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: cetak teks saat tiba*

```python
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 atas chunk-nya*

```javascript
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`);
}

```

## Seperti apa stream di wire?

Setiap event adalah satu baris yang dimulai dengan `data: `, diikuti baris kosong. Chunk pertama biasanya membawa `role`, chunk berikutnya beberapa karakter `content` masing-masing, dan chunk dengan `finish_reason` menutup jawaban. Dengan `include_usage`, satu chunk lagi menyusul dengan array `choices` kosong dan objek `usage`. Stream selalu berakhir dengan `data: [DONE]`. Id dan jumlah di bawah ini bersifat ilustratif.

*Server-sent events dari satu jawaban singkat (ilustratif)*

```text
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]

```

## Bagaimana jika stream terputus?

Error yang ditemukan sebelum token pertama, seperti key salah atau saldo kosong, kembali sebagai error HTTP normal dengan body JSON, bukan sebagai stream; [halaman error](https://llmwithcrypto.com/id/docs/errors/) mencantumkannya. Error selama generasi mengakhiri stream lebih awal, tanpa `finish_reason`.

Jika Anda menutup koneksi sendiri, generasi berhenti. Anda lalu membayar input dan token yang sudah dihasilkan, seperti pada panggilan apa pun. Kode Anda harus menganggap stream yang berakhir tanpa `finish_reason` dan tanpa `[DONE]` sebagai tidak lengkap, dan mengirim ulang permintaan jika membutuhkan jawaban lengkap.

## Streaming: pertanyaan umum

### Apakah streaming lebih mahal?

Tidak. Token yang sama ditagih dengan harga yang sama. Anda membayar per token dari saldo Anda: token input dan output dihitung oleh tokenizer model itu sendiri dan ditagih sesuai harga model tersebut per 1M token. Panggilan yang berakhir dengan error tidak dikenai biaya.

### Bisakah saya melakukan streaming dengan tool calling?

Bisa, pada model yang mendukung tool: nama fungsi dan argumen tiba dalam potongan di `delta.tool_calls` dan harus digabung sebelum digunakan. [Halaman tool calling](https://llmwithcrypto.com/id/docs/tool-calling/) menunjukkan loop tanpa streaming, yang lebih sederhana untuk memulai.

### Mengapa saya tidak mendapat usage dalam panggilan yang di-stream?

Tambahkan `"stream_options": {"include_usage": true}`. Tanpanya, stream tidak membawa jumlah token; dasbor tetap menampilkannya.

---

LLMwithCrypto: LLMwithCrypto adalah LLM API yang kompatibel dengan OpenAI untuk model open-weight — DeepSeek V4 Pro, DeepSeek V4.1 Flash, DeepSeek R1, Qwen3.5 397B A17B, Qwen3 235B A22B Instruct, gpt-oss-120b, gpt-oss-20b, GLM-4.7, Llama 3.3 70B Instruct, Gemma 4 31B, Mistral Large 3, Mistral Small 4 — dibayar per token dari saldo kripto prabayar, 5% di bawah harga median host publik. Tanpa KYC: tanpa ID, tanpa selfie, tanpa dokumen. Prompt dan output tidak disimpan.
