BazaarLinkBazaarLink
साइन इन
दस्तावेज़API संदर्भSDK संदर्भएजेंटिक उपयोगAI स्किल्स
विषय-सूची

Streaming

Streaming

सेट stream: true सर्वर-भेजे गए इवेंट (SSE) स्ट्रीम प्राप्त करने के लिए। प्रत्येक घटना में प्रतिक्रिया का एक हिस्सा होता है।

from openai import OpenAI

client = OpenAI(
    base_url="https://api.bazaarlink.ai/v1",
    api_key="sk-bl-YOUR_API_KEY",
)

stream = client.chat.completions.create(
    model="anthropic/claude-sonnet-4.6",
    messages=[{"role": "user", "content": "Count to 10 slowly."}],
    stream=True,
)

for chunk in stream:
    content = chunk.choices[0].delta.content
    if content:
        print(content, end="", flush=True)

SSE प्रारूप स्ट्रीमिंग में

data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{"content":"Hello"},"index":0}]}

data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{"content":" world"},"index":0}]}

data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{},"finish_reason":"stop","index":0}],"usage":{"prompt_tokens":10,"completion_tokens":4,"total_tokens":14}}

data: [DONE]
Usage
स्ट्रीमिंग करते समय, उपयोग डेटा को [DONE] संदेश से पहले अंतिम खंड में, एक खाली डेल्टा और फिनिश_कारण: "स्टॉप" के साथ एक विकल्प सरणी के साथ लौटाया जाता है।

Keep-alive और अंतिम चंक

Stream में SSE comment lines और keep-alive के unknown या ping events हो सकते हैं। इन्हें अनदेखा करें और data frames parse करें; अंतिम data frame में data: [DONE] से पहले usage हो सकता है।

: keepalive          <- SSE comment line — ignore, do NOT JSON.parse

data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{"content":"Hi"},"index":0}]}

data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{},"finish_reason":"stop","index":0}],"usage":{...}}

data: [DONE]

स्ट्रीम रद्दीकरण

क्लाइंट कनेक्शन बंद करके स्ट्रीमिंग रिक्वेस्ट रद्द की जा सकती है — जैसे AbortController.abort() कॉल करना या stream ऑब्जेक्ट बंद करना। रद्दीकरण मिलते ही BazaarLink आगे के चंक भेजना बंद कर देता है और प्रोवाइडर को भेजी जा रही रिक्वेस्ट रद्द कर देता है।

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.bazaarlink.ai/v1",
  apiKey: "sk-bl-YOUR_API_KEY",
});

const controller = new AbortController();

const stream = await client.chat.completions.create(
  {
    model: "anthropic/claude-sonnet-4.6",
    messages: [{ role: "user", content: "Write a long story." }],
    stream: true,
  },
  { signal: controller.signal }
);

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

// e.g. on a "Stop" button click:
controller.abort();
बीच में रुकी स्ट्रीम के लिए कोई शुल्क नहीं
अगर अंतिम usage चंक आने से पहले ही स्ट्रीम खत्म हो जाए — क्लाइंट-साइड रद्दीकरण सहित — तो उस रिक्वेस्ट के लिए कोई भरोसेमंद टोकन-गणना नहीं होती, इसलिए BazaarLink पूरा आरक्षित अमाउंट वापस कर देता है। रद्द करने से पहले आपके क्लाइंट तक पहुँच चुकी सामग्री के लिए कोई शुल्क नहीं लिया जाता।
प्रोवाइडर पर तुरंत रुकने की गारंटी नहीं
कनेक्शन बंद करने से BazaarLink तुरंत आगे के टोकन भेजना और उनका शुल्क लेना बंद कर देता है, लेकिन कनेक्शन टूटते ही अपस्ट्रीम प्रोवाइडर अपने सर्वर पर जनरेशन रोकता है या नहीं, यह उस प्रोवाइडर पर निर्भर करता है — कुछ डिस्कनेक्ट के बाद भी थोड़ी देर तक प्रोसेसिंग जारी रख सकते हैं।

मिड-स्ट्रीम त्रुटियाँ

त्रुटि फ़्रेम पर कोई विकल्प फ़ील्ड नहीं
यदि स्ट्रीमिंग शुरू होने के बाद कोई विफलता होती है (उदाहरण के लिए अपस्ट्रीम कनेक्शन बंद हो जाता है), तो आपको सामान्य {विकल्प:[...]} के बजाय एक SSE डेटा फ्रेम आकार का {त्रुटि: {संदेश, प्रकार, कोड}} मिलता है - बिना HTTP स्थिति परिवर्तन के, क्योंकि हेडर पहले ही भेजे जा चुके हैं। विकल्प[0].डेल्टा पढ़ने से पहले त्रुटि कुंजी की जांच करें, और केवल पहले से स्ट्रीम किए गए टोकन के लिए बिल करें (आंशिक बिलिंग लागू होती है)।
data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{"content":"The capital of "},"index":0}]}

data: {"error":{"message":"The request could not be completed.","type":"upstream_error","code":502}}

data: [DONE]
Support
Hi! How can we help you?
Send a message and we'll get back to you soon.
Streaming | BazaarLink