AI স্ট্রিমিং ডিবাগিং
আমি একটি AI চ্যাট ইন্টারফেস তৈরি করতে তিন সপ্তাহ ব্যয় করেছি। আমি শব্দের একটি মসৃণ প্রবাহ চেয়েছিলাম। কিন্তু আমি কানেকশন বিচ্ছিন্ন হয়ে যাওয়া এবং অসম্পূর্ণ বাক্য পেয়েছিলাম।
আমার অ্যাপে FastAPI এবং React ব্যবহার করা হয়েছিল। ছোট উত্তরগুলো ঠিকঠাক কাজ করছিল। কিন্তু লম্বা উত্তরগুলো শব্দের মাঝপথেই কেটে যাচ্ছিল। সার্ভার ডেটা পাঠানো বন্ধ করে দিচ্ছিল।
আমি এটি ঠিক করার চেষ্টা করেছি। আমি timeout বাড়িয়ে দিয়েছিলাম। কিন্তু তাতে কাজ হয়নি। আমি একটি retry loop যোগ করেছিলাম। এর ফলে শব্দগুলো ডুপ্লিকেট বা বারবার আসছিল।
সমস্যাটি ছিল parser-এ। AI API ডেটার লাইনগুলো পাঠায়। আমার কোড কানেকশনটি খুব দ্রুত বন্ধ করে দিচ্ছিল। এটি শেষ সংকেতের (end signal) জন্য অপেক্ষা করেনি।
সমাধানটি হলো:
aiter_lines-এর পরিবর্তেaiter_bytesব্যবহার করুন।- লাইন বাফারটি (line buffer) ম্যানুয়ালি ম্যানেজ করুন।
- থামার জন্য
[DONE]সিগন্যালটি খুঁজুন।
তারপর আমার UI ফ্রিজ হয়ে গেল। সার্ভার প্রতি সেকেন্ডে ৫০টি chunk পাঠাচ্ছিল। React তা সামলাতে পারছিল না। ডেটা থ্রটল (throttle) করার জন্য আমি সার্ভারে একটি ছোট বিলম্ব (delay) যোগ করেছি।
আপনার জন্য কিছু শিক্ষা:
- প্রথমে স্ট্রিমিং স্পেসিফিকেশন (spec) পড়ুন।
- একটি খালি লাইন মানেই শেষ—এমনটা ধরে নেবেন না।
- SSE parsing-এর জন্য একটি লাইব্রেরি ব্যবহার করুন।
- chunk সংখ্যা এবং বিলম্ব ট্র্যাক করুন।
স্ট্রিমিং বেশ জটিল। এর কিছু অদ্ভুত বৈশিষ্ট্য (quirks) আছে। একটি স্ট্রিমিং সুন্দরভাবে শেষ হবে—এমনটা কখনোই বিশ্বাস করবেন না।
আপনার দেখা সবচেয়ে অদ্ভুত স্ট্রিমিং বাগ (bug) কোনটি?
উৎস: https://dev.to/__c1b9e06dc90a7e0a676b/debugging-ai-streaming-a-tale-of-chunks-and-timeouts-1p6m ঐচ্ছিক লার্নিং কমিউনিটি: https://t.me/GyaanSetuAi