استریم پاسخ
با فعالسازی 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فعال است.