استریم پاسخ

با فعال‌سازی stream پاسخ به‌صورت Server-Sent Events (SSE) قطعه‌قطعه دریافت می‌شود.

فعال‌سازی

در بدنۀ درخواست stream: true بگذارید.

curl -N -X POST https://api.darvareh.ir/v1/chat/completions \
  -H "Authorization: Bearer YOUR_DARVAREH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.5",
    "stream": true,
    "messages": [{"role":"user","content":"داستان کوتاهی دربارۀ کوه دماوند بنویس"}]
  }'

ساختار رویدادها

هر خط با data: شروع می‌شود و یک شیء JSON دارد. پایان استریم با data: [DONE] اعلام می‌شود.

data: {"id":"chatcmpl_..","choices":[{"delta":{"role":"assistant"},"index":0}]}
data: {"id":"chatcmpl_..","choices":[{"delta":{"content":"در دل"},"index":0}]}
data: {"id":"chatcmpl_..","choices":[{"delta":{"content":" البرز"},"index":0}]}
data: {"id":"chatcmpl_..","choices":[{"delta":{},"index":0,"finish_reason":"stop"}]}
data: [DONE]

مصرف در Node.js

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.DARVAREH_API_KEY,
  baseURL: "https://api.darvareh.ir/v1",
});

const stream = await client.chat.completions.create({
  model: "gpt-5.5",
  stream: true,
  messages: [{ role: "user", content: "یک شعر کوتاه بگو" }],
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

مصرف در Python

from openai import OpenAI

client = OpenAI(api_key="…", base_url="https://api.darvareh.ir/v1")

with client.chat.completions.stream(
    model="gpt-5.5",
    messages=[{"role": "user", "content": "یک شعر کوتاه بگو"}],
) as stream:
    for event in stream:
        if event.type == "content.delta":
            print(event.delta, end="", flush=True)

نکات

هزینه پس از تکمیل استریم بر اساس مجموع توکن‌های ورودی و خروجی از کیف پول کسر می‌شود. قطع اتصال زودهنگام مانع کسر هزینۀ توکن‌های تولیدشده نمی‌شود.
  • کلاینت باید Accept: text/event-stream را بپذیرد و بدنه را buffer نکند.
  • در مرورگر از fetch با ReadableStream استفاده کنید، نه EventSource.
  • در Reverse Proxy مطمئن شوید proxy_buffering off فعال است.