پاسخ جریانی

با stream: true پاسخ به‌صورت جریانی (SSE) می‌آید و می‌توانید همان لحظه آن را نمایش دهید.

درخواست

curl https://gethooshana.ir/v1/chat/completions \
  -H "Authorization: Bearer YOUR_HOOSHANA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"hoshana-auto","stream":true,"messages":[{"role":"user","content":"سلام"}]}'

قالب پاسخ

سه رویداد پشت سر هم می‌آید:

  1. یک رویداد data: با delta که شامل متن پاسخ است
  2. یک رویداد با finish_reason برابر stop به‌همراه usage
  3. رویداد پایانی data: [DONE]

خواندن جریان در جاوااسکریپت

const response = await fetch("https://gethooshana.ir/v1/chat/completions", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_HOOSHANA_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "hoshana-auto",
    stream: true,
    messages: [{ role: "user", content: "سلام" }],
  }),
});

const reader = response.body.getReader();
const decoder = new TextDecoder();

while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  for (const line of decoder.decode(value).split("\n")) {
    if (!line.startsWith("data: ")) continue;
    const payload = line.slice(6);
    if (payload === "[DONE]") break;
    const chunk = JSON.parse(payload);
    process.stdout.write(chunk.choices[0].delta.content ?? "");
  }
}

اگر جریان قطع شد

اگر ارتباط وسط کار قطع شود، رویداد [DONE] نمی‌رسد. در آن حالت درخواست را دوباره بفرستید؛ سهمیه درخواست‌های ناموفق برگردانده نمی‌شود و ممکن است یک واحد دیگر مصرف شود.

محدودیت‌های ورودی در صفحه API آمده است: حداکثر ۱۰۰ پیام و ۸۰۰۰ کاراکتر.