اسٹریمنگ + چنکنگ¶
OpenClaw میں “اسٹریمنگ” کی دو الگ تہیں ہیں:
- یہ عام چینل پیغامات ہوتے ہیں (ٹوکن ڈیلٹاز نہیں)۔ آج بیرونی چینل پیغامات میں حقیقی ٹوکن اسٹریمنگ نہیں ہے۔
- ٹوکن نما اسٹریمنگ (صرف Telegram): تخلیق کے دوران جزوی متن کے ساتھ ایک ڈرافٹ ببل کو اپڈیٹ کرتا ہے؛ آخر میں حتمی پیغام بھیجا جاتا ہے۔
Telegram ڈرافٹ اسٹریمنگ واحد جزوی اسٹریمنگ سطح ہے۔ agents.defaults.blockStreamingChunk: `{ minChars, maxChars, breakPreference?
بلاک اسٹریمنگ (چینل پیغامات)¶
بلاک اسٹریمنگ اسسٹنٹ کے آؤٹ پٹ کو دستیاب ہوتے ہی موٹے چنکس میں بھیجتی ہے۔
Model output
└─ text_delta/events
├─ (blockStreamingBreak=text_end)
│ └─ chunker emits blocks as buffer grows
└─ (blockStreamingBreak=message_end)
└─ chunker flushes at message_end
└─ channel send (block replies)
کلید:
text_delta/events: ماڈل اسٹریمنگ ایونٹس (نان-اسٹریمنگ ماڈلز کے لیے کم ہو سکتے ہیں)۔chunker:EmbeddedBlockChunkerکم/زیادہ حدود اور بریک ترجیح کا اطلاق۔channel send: اصل آؤٹ باؤنڈ پیغامات (بلاک جوابات)۔
کنٹرولز:
agents.defaults.blockStreamingDefault:"on"/"off"(بطورِ طے شدہ بند)۔- چینل اووررائیڈز:
*.blockStreaming(اور فی اکاؤنٹ ویریئنٹس) تاکہ ہر چینل کے لیے"on"/"off"کو مجبور کیا جا سکے۔ agents.defaults.blockStreamingBreak:"text_end"یا"message_end"۔- }
۔agents.defaults.blockStreamingCoalesce:{ minChars?, maxChars?, idleMs? - }` (بھیجنے سے پہلے اسٹریمنگ بلاکس کو مرج کریں)۔ جب بلاک اسٹریمنگ فعال ہو، OpenClaw بھیجنے سے پہلے مسلسل بلاک چنکس کو مرج کر سکتا ہے۔
- چینل ہارڈ کیپ:
*.textChunkLimit(مثلاًchannels.whatsapp.textChunkLimit)۔ - چینل چنک موڈ:
*.chunkMode(lengthبطورِ طے شدہ،newlineلمبائی کے حساب سے چنکنگ سے پہلے خالی لائنوں (پیراگراف حدود) پر تقسیم کرتا ہے)۔ - Discord سافٹ کیپ:
channels.discord.maxLinesPerMessage(بطورِ طے شدہ 17) UI کلپنگ سے بچنے کے لیے لمبے جوابات کو تقسیم کرتا ہے۔
حدی معنویات:
text_end: جیسے ہی چنکر خارج کرے، بلاکس اسٹریمنگ کریں؛ ہرtext_endپر فلش کریں۔message_end: اسسٹنٹ پیغام مکمل ہونے تک انتظار کریں، پھر بفر شدہ آؤٹ پٹ فلش کریں۔
message_end پھر بھی چنکر استعمال کرتا ہے اگر بفر شدہ متن maxChars سے بڑھ جائے، اس لیے آخر میں متعدد چنکس خارج ہو سکتے ہیں۔
چنکنگ الگورتھم (کم/زیادہ حدود)¶
بلاک چنکنگ EmbeddedBlockChunker کے ذریعے نافذ کی جاتی ہے:
- کم حد: جب تک بفر >=
minCharsنہ ہو، خارج نہ کریں (جبراً نہ ہو تو)۔ - زیادہ حد:
maxCharsسے پہلے تقسیم کو ترجیح دیں؛ اگر مجبور ہوں توmaxCharsپر تقسیم کریں۔ - بریک ترجیح:
paragraph→newline→sentence→whitespace→ سخت بریک۔ - کوڈ فینسز: فینسز کے اندر کبھی تقسیم نہ کریں؛ جب
maxCharsپر مجبور ہوں تو مارک ڈاؤن درست رکھنے کے لیے فینس بند + دوبارہ کھولیں۔
maxChars کو چینل textChunkLimit تک محدود کیا جاتا ہے، اس لیے فی چینل کیپس سے تجاوز ممکن نہیں۔
کوالسنگ (اسٹریمنگ شدہ بلاکس کو ضم کرنا)¶
یہ “سنگل لائن اسپام” کم کرتا ہے جبکہ ترقی پسند آؤٹ پٹ فراہم کرتا رہتا ہے۔ جب بلاک اسٹریمنگ فعال ہو، آپ بلاک جوابات کے درمیان (پہلے بلاک کے بعد) ایک بے ترتیب وقفہ شامل کر سکتے ہیں۔
- کوالسنگ آئیڈل گیپس (
idleMs) کا انتظار کرتی ہے، پھر فلش کرتی ہے۔ - بفرز
maxCharsسے محدود ہیں اور حد سے بڑھنے پر فلش ہو جائیں گے۔ minCharsچھوٹے ٹکڑوں کو تب تک بھیجنے سے روکتا ہے جب تک کافی متن جمع نہ ہو جائے (حتمی فلش ہمیشہ باقی متن بھیج دیتا ہے)۔- جوائنر
blockStreamingChunk.breakPreferenceسے اخذ کیا جاتا ہے (paragraph→\n\n,newline→\n,sentence→ اسپیس)۔ - چینل اووررائیڈز
*.blockStreamingCoalesceکے ذریعے دستیاب ہیں (بشمول فی اکاؤنٹ کنفیگز)۔ - ڈیفالٹ کوالس
minCharsSignal/Slack/Discord کے لیے 1500 تک بڑھا دیا جاتا ہے جب تک اووررائیڈ نہ کیا جائے۔
بلاکس کے درمیان انسان نما رفتار¶
یہ ملٹی-ببل جوابات کو
زیادہ قدرتی محسوس کراتا ہے۔ اسٹریم چنکس: blockStreamingDefault: "on" + blockStreamingBreak: "text_end" (جیسے جیسے جائیں خارج کریں)۔
- کنفیگ:
agents.defaults.humanDelay(ایجنٹ کے لحاظ سےagents.list[].humanDelayکے ذریعے اووررائیڈ)۔ - موڈز:
off(بطورِ طے شدہ)،natural(800–2500ms)،custom(minMs/maxMs)۔ - اطلاق صرف بلاک جوابات پر ہوتا ہے، حتمی جوابات یا ٹول سمریز پر نہیں۔
“چنکس اسٹریمنگ کریں یا سب کچھ”¶
یہ اس سے میپ ہوتا ہے:
- غیر-Telegram چینلز کو بھی
*.blockStreaming: trueدرکار ہوتا ہے۔ Non-Telegram channels also need*.blockStreaming: true. - آخر میں سب کچھ اسٹریمنگ کریں:
blockStreamingBreak: "message_end"(ایک بار فلش، اگر بہت لمبا ہو تو متعدد چنکس ممکن)۔ - کوئی بلاک اسٹریمنگ نہیں:
blockStreamingDefault: "off"(صرف حتمی جواب)۔
- چینل نوٹ: غیر‑Telegram چینلز کے لیے، بلاک اسٹریمنگ بند رہتی ہے جب تک کہ
*.blockStreamingکو واضح طور پرtrueپر سیٹ نہ کیا جائے۔ 2. Telegram بلاک جوابات کے بغیر ڈرافٹس اسٹریم کر سکتا ہے (channels.telegram.streamMode)۔
کنفیگ لوکیشن یاد دہانی: blockStreaming* کے ڈیفالٹس
agents.defaults کے تحت ہوتے ہیں، روٹ کنفیگ میں نہیں۔
Telegram ڈرافٹ اسٹریمنگ (ٹوکن نما)¶
Telegram واحد چینل ہے جس میں ڈرافٹ اسٹریمنگ ہے:
- Bot API
sendMessageDraftاستعمال کرتا ہے ٹاپکس والے پرائیویٹ چیٹس میں۔ channels.telegram.streamMode: "partial" | "block" | "off"۔partial: تازہ ترین اسٹریمنگ متن کے ساتھ ڈرافٹ اپڈیٹس۔block: چنک شدہ بلاکس میں ڈرافٹ اپڈیٹس (وہی چنکر قواعد)۔off: کوئی ڈرافٹ اسٹریمنگ نہیں۔- ڈرافٹ چنک کنفیگ (صرف
streamMode: "block"کے لیے):channels.telegram.draftChunk(ڈیفالٹس:minChars: 200,maxChars: 800)۔ - ڈرافٹ اسٹریمنگ بلاک اسٹریمنگ سے الگ ہے؛ بلاک جوابات بطورِ طے شدہ بند ہوتے ہیں اور غیر-Telegram چینلز پر صرف
*.blockStreaming: trueکے ذریعے فعال کیے جاتے ہیں۔ - حتمی جواب پھر بھی ایک عام پیغام ہوتا ہے۔
/reasoning streamاستدلال کو ڈرافٹ ببل میں لکھتا ہے (صرف Telegram)۔
جب ڈرافٹ اسٹریمنگ فعال ہو، OpenClaw اس جواب کے لیے بلاک اسٹریمنگ غیر فعال کر دیتا ہے تاکہ ڈبل اسٹریمنگ سے بچا جا سکے۔
Telegram (private + topics)
└─ sendMessageDraft (draft bubble)
├─ streamMode=partial → update latest text
└─ streamMode=block → chunker updates draft
└─ final reply → normal message
کلید:
sendMessageDraft: Telegram ڈرافٹ ببل (حقیقی پیغام نہیں)۔final reply: عام Telegram پیغام بھیجنا۔