API اور SDKگائیڈ
OpenAI SDK کے ساتھ Node.js میں چیٹ جوابات اسٹریم کریں
Node.js میں چیٹ کمپلیشن کو ٹوکن بہ ٹوکن اسٹریم کریں: for await لوپ، طلب پر روکنا، غلطیوں کو سنبھالنا اور OpenAI SDK کے ساتھ ٹوکن استعمال۔

اس صفحہ پر
اسٹریمنگ آپ کی ایپ کو جواب مکمل ہونے کا انتظار کرنے کے بجائے تیار ہوتے ہی دکھانے دیتی ہے۔ اس گائیڈ میں آپ ایک چھوٹا Node.js اسکرپٹ بنائیں گے جو CheapTokens API سے چیٹ کمپلیشن کو ٹوکن بہ ٹوکن اسٹریم کرتا ہے، طلب پر روکتا ہے اور غلطیوں کو سنبھالتا ہے۔ اس موضوع کا Python ورژن Streaming responses in Python میں ہے۔
آپ کو کیا درکار ہے#
- Node.js 22 یا نیا (
openaiپیکیج README میں بیان کردہ کم از کم ورژن، 22 اکتوبر 2026 کو چیک کیا گیا)۔ - ایک CheapTokens API کلید۔ اگر آپ کے پاس ابھی تک نہیں ہے تو Your first API request with CheapTokens پر عمل کریں۔
- آفیشل SDK:
npm install openai۔
CheapTokens https:/ پر OpenAI کے ساتھ مطابقت رکھنے والی API فراہم کرتا ہے، لہٰذا آفیشل openai پیکیج صرف base URL اور کلید تبدیل کرنے سے کام کرتا ہے۔ کلید کو کوڈ میں نہیں، ماحولیاتی متغیر میں رکھیں:
export CHEAPTOKENS_API_KEY="your-key"مرحلہ 1۔ for await کے ساتھ جواب اسٹریم کریں#
stream.mjs بنائیں (.mjs ایکسٹینشن آپ کو import اور ٹاپ لیول await استعمال کرنے دیتی ہے):
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.CHEAPTOKENS_API_KEY,
baseURL: 'https://api.cheaptokens.dev/v1',
});
const stream = await client.chat.completions.create({
model: 'deepseek-ai/DeepSeek-V4-Flash-0731', // take the id from the CheapTokens docs
messages: [{ role: 'user', content: 'Explain streaming in two sentences.' }],
stream: true,
stream_options: { include_usage: true },
});
let usage = null;
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content;
if (delta) process.stdout.write(delta);
if (chunk.usage) usage = chunk.usage;
}
console.log('\n\nusage:', usage);اسے node stream.mjs سے چلائیں۔ SDK API سے Server-Sent Events پڑھتا ہے اور for await کی ہر تکرار پر آپ کو ایک چنک دیتا ہے۔ تین تفصیلات اہم ہیں:
- متن
chunk.میں آتا ہے۔ کچھ چنکس میں کوئی متن نہیں ہوتا (پہلا چنک اکثر صرف رول رکھتا ہے)، لہٰذا چیک کریں کہchoices[0]. delta. content deltaخالی نہیں ہے۔ process.بغیر لائن بریک کے پرنٹ کرتا ہے، اس لیے الفاظ یکے بعد دیگرے ظاہر ہوتے ہیں۔stdout. write stream_کے ساتھ آخری چنک میں prompt اور completion ٹوکن گنتی کے ساتھoptions: { include_ usage: true } usageآبجیکٹ ہوتا ہے، اور اس کیchoicesایرے خالی ہوتی ہے۔ اسی لیے کوڈchunk.کو optional chaining کے ساتھ استعمال کرتا ہے۔choices[0]?.
ماڈل آئی ڈی CheapTokens دستاویزات سے آتی ہے: فراہم کنندگان ایک ہی ماڈل کو مختلف نام دیتے ہیں، لہٰذا آئی ڈی وہیں سے کاپی کریں۔
مرحلہ 2۔ طلب پر اسٹریم روکیں#
صارفین Stop دباتے ہیں، ٹیب بند کرتے ہیں یا چیٹس بدلتے ہیں۔ درخواست منسوخ کریں تاکہ آپ ایسے ٹوکنز کا انتظار نہ کریں جو کوئی نہیں پڑھے گا۔ درخواست کے آپشنز میں AbortSignal پاس کریں:
const controller = new AbortController();
process.on('SIGINT', () => controller.abort()); // Ctrl+C stops the stream
const stream = await client.chat.completions.create(
{
model: 'deepseek-ai/DeepSeek-V4-Flash-0731',
messages: [{ role: 'user', content: 'Write a long story about a lighthouse.' }],
stream: true,
},
{ signal: controller.signal },
);اسٹریم آبجیکٹ کا اپنا stream. بھی ہوتا ہے، اور for await لوپ سے break کے ساتھ نکلنا بھی کنکشن بند کر دیتا ہے۔ جو بھی آپ کے کوڈ کے قریب ہو وہی استعمال کریں: سگنل جب کینسل بٹن کہیں اور ہو، break جب فیصلہ لوپ کے اندر ہو (مثلاً، آپ کو کوئی اسٹاپ ورڈ مل گیا)۔
مرحلہ 3۔ غلطیوں کو سنبھالیں#
اسٹریم پہلے ٹوکن سے پہلے (غلط کلید، خالی بیلنس) یا درمیان میں (نیٹ ورک ڈراپ) ناکام ہو سکتا ہے۔ درخواست اور لوپ دونوں کو ایک try میں لپیٹیں:
try {
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content;
if (delta) process.stdout.write(delta);
}
} catch (err) {
if (err instanceof OpenAI.APIUserAbortError) {
console.log('\n[stopped by user]');
} else if (err instanceof OpenAI.APIError) {
console.error(`\nAPI error ${err.status}: ${err.message}`);
} else {
throw err;
}
}APIUserAbortErrorوہ ہے جو آپ کے اپنےabort()کے بعد ملتا ہے۔ یہ ناکامی نہیں ہے، لہٰذا اسے ناکامی کے طور پر نہ دکھائیں۔APIErrorمیں HTTPstatusہوتا ہے: 401 کا مطلب غلط یا غائب کلید، 429 کا مطلب بہت زیادہ درخواستیں، اور ٹوکنز کے بارے میں پیغام کا مطلب بیلنس میں ٹاپ اپ کی ضرورت ہے۔ مزید وجوہات اور حل Common connection errors and how to fix them اور "Not enough tokens" error میں ہیں۔- جو متن پہلے ہی پرنٹ ہو چکا ہے وہ غلطی کے بعد بھی درست رہتا ہے۔ اگر آپ جزوی جواب دکھانا چاہتے ہیں تو اسے رکھیں۔
مرحلہ 4۔ استعمال پڑھیں اور لاگت کا اندازہ لگائیں#
usage آبجیکٹ میں prompt_tokens اور completion_ ہوتے ہیں۔ ماڈل کی فی 1M ٹوکن قیمت کے ساتھ، یہ آپ کو درخواست کی درست لاگت دیتا ہے۔ کچھ چلانے سے پہلے موٹے اندازے کے لیے نیچے دیا گیا لائیو ٹیبل استعمال کریں: یہ 1,000 درخواستوں کی لاگت دکھاتا ہے جن میں ہر ایک میں 2,000 ان پٹ اور 800 آؤٹ پٹ ٹوکنز ہوں۔
| ماڈل | ان پٹ $/1M | آؤٹ پٹ $/1M | فی درخواست | 1,000 درخواستیں | OpenRouter، 1,000 درخواستیں |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000072 | $0.072 | $0.143 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.00011 | $0.11 | $0.22 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.00022 | $0.22 | $1.56 |
فی درخواست 2,000 ان پٹ اور 800 آؤٹ پٹ ٹوکنز۔ فی 1M ٹوکنز کی قیمتیں موجودہ ہیں اور ہمارے ٹیرف کے ساتھ تبدیل ہوتی ہیں؛ OpenRouter کالم اسی ورک لوڈ کے لیے حوالہ جاتی قیمتیں دکھاتا ہے۔
اسٹریم شدہ چیٹ جوابات کے لیے، MiniMax-M2.7 کی قیمت $0.05 فی 1M ان پٹ اور $0.15 فی 1M آؤٹ پٹ ٹوکنز ہے، 180K کانٹیکسٹ اور فی جواب زیادہ سے زیادہ 8,192 آؤٹ پٹ ٹوکنز کے ساتھ۔ قیمت دن کے کسی بھی وقت فی ماڈل مقرر ہے، اور ایک بیلنس تمام ماڈلز کے لیے کافی ہے، لہٰذا اپنے prompts پر ان کا موازنہ کرنے کے لیے model اسٹرنگ تبدیل کرنا کافی ہے۔
مکمل اسکرپٹ#
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.CHEAPTOKENS_API_KEY,
baseURL: 'https://api.cheaptokens.dev/v1',
});
const controller = new AbortController();
process.on('SIGINT', () => controller.abort());
try {
const stream = await client.chat.completions.create(
{
model: 'deepseek-ai/DeepSeek-V4-Flash-0731',
messages: [{ role: 'user', content: 'Explain streaming in two sentences.' }],
stream: true,
stream_options: { include_usage: true },
},
{ signal: controller.signal },
);
let usage = null;
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content;
if (delta) process.stdout.write(delta);
if (chunk.usage) usage = chunk.usage;
}
console.log('\n\nusage:', usage);
} catch (err) {
if (err instanceof OpenAI.APIUserAbortError) {
console.log('\n[stopped by user]');
} else if (err instanceof OpenAI.APIError) {
console.error(`\nAPI error ${err.status}: ${err.message}`);
} else {
throw err;
}
}اگلے مراحل#
- چنکس کو اپنے اینڈ پوائنٹ سے Server-Sent Events کے ذریعے براؤزر تک بھیجیں، تاکہ کلید کبھی سرور سے باہر نہ جائے۔
- صرف
modelاسٹرنگ تبدیل کر کے دیگر ماڈلز آزمائیں: MiniMax-M2.7 اسی بیلنس اور اسی base URL پر دستیاب ہے۔ - کلید حاصل کریں اور اسکرپٹ چلائیں: create a CheapTokens API key اور بیلنس ٹاپ اپ کریں۔
ہر ماڈل کے اینڈ پوائنٹس، ماڈل آئی ڈیز اور حدود CheapTokens docs میں ہیں۔



