কনটেন্টে যান

mintbot কীভাবে ফাইল সামলায়

আপনি যখন Telegram, ওয়েব প্যানেল বা API-এর মাধ্যমে আপনার mintbot এজেন্টকে কোনো ছবি, ডকুমেন্ট, ভয়েস মেসেজ, স্প্রেডশিট, স্ক্রিনশট বা PDF পাঠান, ফাইলটি সংরক্ষিত হয় আপনার এজেন্টের নিজস্ব VPS-এ, আর কোথাও নয়। আপনি যতদিন চান ততদিন সেটি সেখানেই থাকে, আর LLM পায় তার জন্য তৈরি করা একটি কাজের কপি।

এটি একটি নিঃশব্দ ডিজাইন সিদ্ধান্ত, কিন্তু এর প্রভাব বড়। বিষয়টা খুলে বলা দরকার, কারণ সাধারণ ব্যবহারকারীদের AI চ্যাট থেকে mintbot সবচেয়ে বেশি আলাদা ঠিক এখানেই।

চিত্র: আপলোড করা ফাইল মূল রূপে আপনার এজেন্টের VPS-এ সংরক্ষিত হয়; ফাইলের ধরন দেখে বেছে নেওয়া একটি অ্যাডাপ্টার LLM-এর জন্য কাজের কপি তৈরি করে
মূল ফাইলটি আপনার VPS-এ অক্ষত থাকে — মডেল সবসময় শুধু তার জন্য তৈরি কাজের কপিটাই দেখে।

শুরু থেকে শেষ পর্যন্ত প্রবাহ

  1. আপলোড এজেন্টের VPS-এ পৌঁছায়। ওয়েব প্যানেলে টেনে আনা PDF সরাসরি আপনার VPS-এ যায়। Telegram-এ পাঠানো ছবি বা ফাইল mintbot বট Telegram থেকে নিয়ে সঙ্গে সঙ্গে আপনার VPS-এ পৌঁছে দেয় — ফাইলটি শুধু হাতবদল হয়, কখনো কেন্দ্রীয়ভাবে সংরক্ষিত হয় না। এজেন্টের লোকাল API ফাইলের শুরুর শনাক্তকারী বাইটগুলো (magic bytes) পরীক্ষা করে বোঝে ফাইলটি আসলে কোন ধরনের (ফোন আর ব্রাউজার আশ্চর্য রকম প্রায়ই ভুল লেবেল দেয়), তার SHA-256 হ্যাশ হিসাব করে এবং সেটি /var/lib/mintbot-agent/uploads/<shard>/<sha256>.<ext>-এ লেখে। একটি লোকাল ক্যাটালগে উৎস (telegram / panel / api), আপলোডকারীর ID, MIME টাইপ আর মূল ফাইলনাম সহ একটি সারি যোগ হয়। একই ফাইল দুবার পাঠালেও সেটি একবারই সংরক্ষিত হয়।

    কথোপকথনটি যদি কোনো প্রজেক্টে চলে, এজেন্ট সেই প্রজেক্টের uploads/ ফোল্ডারেও একটি কপি রাখে, যাতে প্রজেক্টের বাকি ফাইলের পাশেই ফাইলটি নিয়ে কাজ করতে পারে।

  2. মূল ফাইলে কেউ হাত দেয় না। এই মুহূর্ত থেকে mintbot-এর ভেতরের কোনো কিছুই সংরক্ষিত ফাইলটি বদলায় না। LLM-এর জন্য ফাইল প্রস্তুত করা অ্যাডাপ্টারগুলো শুধু কাজের কপি তৈরি করে — ছোট করা JPEG, ডিকোড করা টেক্সট। বাইটে বাইটে হুবহু মূল ফাইলটি ডিস্কে থাকে, যতক্ষণ না আপনি সেটি মুছে ফেলেন। কোনো কেন্দ্রীয় স্টোরেজ নেই, সংরক্ষণের টাইমার নেই, এক এজেন্ট থেকে আরেক এজেন্টে ফাঁস হওয়ার সুযোগ নেই: প্রতিটি এজেন্টের VPS কেবল নিজের মালিকের ফাইলগুলোর কথাই জানে।

  3. মডেল পায় তার জন্য তৈরি সংস্করণ। এজেন্ট যখন LLM-কে ফাইলটি দেখায়, একটি ছোট ডিসপ্যাচার MIME টাইপ আর এক্সটেনশন দেখে সঠিক অ্যাডাপ্টার বেছে নেয়:

    অ্যাডাপ্টার কী সামলায় মডেল কী পায়
    ছবি JPG, PNG, WebP, GIF, HEIC (iPhone), AVIF, TIFF, BMP লম্বা দিক 1568 px পর্যন্ত ছোট করে, JPEG q85-এ আবার এনকোড করে সরাসরি অনুরোধের মধ্যে জুড়ে দেওয়া হয়। ডিকোডিং চলে একটি আলাদা, স্বল্পস্থায়ী প্রসেসে, যার মেমরি সীমা আপনার VPS অনুযায়ী ঠিক করা, তাই বিশাল কোনো ছবিও এজেন্টকে ধীর করতে পারে না
    PDF 32 MB পর্যন্ত .pdf আসল PDF হিসেবেই জুড়ে দেওয়া হয় — Claude সরাসরি টেক্সট আর লেআউট পড়ে। এর চেয়ে বড় PDF ডিস্কে থাকে, আর এজেন্ট নিজেই তার টেক্সট বের করে (যেমন pdftotext দিয়ে)
    টেক্সট .txt, .md, .csv, .json, .yaml, .svg, সোর্স কোড (.py, .js, .ts, .go, .rs, …), লগ, diff UTF-8 হিসেবে ডিকোড করা হয় (বিকল্প হিসেবে latin-1) এবং 500 KB পর্যন্ত জুড়ে দেওয়া হয়; এর চেয়ে লম্বা ফাইল সেখানেই কেটে দেওয়া হয়, পুরো মূল ফাইল ডিস্কে থাকে
    অডিও .mp3, .ogg, .opus, .m4a, .wav, .flac, .aac Telegram আর প্যানেলের মাইক্রোফোন থেকে আসা ভয়েস মেসেজ আগে থেকেই লিখিত রূপে আসে। অডিও ফাইল এখনো স্বয়ংক্রিয়ভাবে ট্রান্সক্রাইব হয় না — এজেন্ট ফাইলটির অবস্থান আর নির্দেশনা পায়, আর আপনি বললে সেটি ট্রান্সক্রাইব করে
    ভিডিও .mp4, .mov, .webm, .mkv, .avi এখনো স্বয়ংক্রিয়ভাবে প্রসেস হয় না। আপনি বললে এজেন্ট ffmpeg ইনস্টল করে (আগে জানিয়ে দেয় এতে কতটা ডিস্ক জায়গা লাগবে) এবং নিজেই ফ্রেম বা অডিও ট্র্যাক বের করে
    Office ডকুমেন্ট .docx, .xlsx, .pptx, পুরোনো .doc / .xls / .ppt, .odt, .ods, .odp এখনো স্বয়ংক্রিয়ভাবে প্রসেস হয় না। আপনি বললে এজেন্ট একটি ছোট রিডার লাইব্রেরি ইনস্টল করে টেক্সট বের করে
    অজানা বাকি সবকিছু ফাইলের নাম, ধরন, আকার আর ডিস্কে তার অবস্থান সহ একটি নোট, সঙ্গে hex-এ তার প্রথম কয়েকটি বাইট — মডেলের পক্ষে ফাইলটি চিনতে এবং কাজের প্রয়োজনে নিজের টুল দিয়ে খুলতে এটুকুই যথেষ্ট

    প্রতিটি কাজের কপি মূল ফাইলের পাশে <sha256>.cache/v<N>.json হিসেবে ক্যাশ করা থাকে, তাই পরের বার মডেলের সেই ফাইল দরকার হলে সেটি সঙ্গে সঙ্গে লোড হয়। কোনো অ্যাডাপ্টার বদলালে ক্যাশ নিজে থেকেই নতুন করে তৈরি হয়।

  4. মডেলের কনটেক্সটে মেয়াদ ফুরিয়ে যাওয়া URL নেই। কোনো ছবি বা PDF LLM-এর কাছে গেলে সেটি একই অনুরোধে জুড়ে দেওয়া হয় — এমন কোনো URL নেই যা পরে 404 দিতে পারে, মেয়াদসহ কোনো সাইন করা লিংক নেই। যেখানে মডেলের শুধু একটি রেফারেন্স দরকার, সেখানে URL হলো একটি অভ্যন্তরীণ ঠিকানা: https://agent<id>.<domain>/<panel_token>/api/local/uploads/<upload_id>/raw — এটি আপনার এজেন্টের নিজস্ব প্যানেল টোকেন দিয়ে সুরক্ষিত এবং ফাইলটি ডিস্কে যতদিন আছে ততদিন বৈধ।

কেন এটি সাধারণ AI চ্যাটের চেয়ে ভালো

আপনি যখন ChatGPT-তে ছবি বা Claude.ai-তে PDF আপলোড করেন, ফাইলটি যায় প্রোভাইডারের স্টোরেজে, সেই কথোপকথনের সঙ্গে যুক্ত হয়ে, আর কখন সেটি মুছে যাবে তা ঠিক করে প্রোভাইডারের সংরক্ষণ নীতি। একটা সময় পরে ফাইলটি আর থাকে না, যদিও যে কথোপকথনে সেটি ছিল তা আপনি তখনও দেখতে পান। প্রোভাইডার বদলানো মানে আবার শূন্য থেকে শুরু।

Telegram বটের একটি পরিচিত ফাঁদ পার্থক্যটা স্পষ্ট করে দেয়। Telegram প্রতিটি ছবির জন্য একটি স্থায়ী file_id রাখে, কিন্তু বট তার জন্য যে ডাউনলোড লিংক পায়, সেটি কাজ করার নিশ্চয়তা মাত্র মোটামুটি এক ঘণ্টা। যে বটগুলো শুধু সেই লিংকটুকু রাখে, তারা গতকালের ছবির জন্য 404 দেয়। ফাইল পৌঁছানোর সঙ্গে সঙ্গে mintbot সেটি আপনার এজেন্টের আর্কাইভে কপি করে নেয় — আর আপনি কোনো পুরোনো ছবির উত্তর দিলে স্থায়ী file_id দিয়ে সেটি আবার নিয়ে আসে। তখন থেকে ছবিটি আপনার।

এই ডিজাইন থেকে তিনটি জিনিস আসে:

  • ফাইল আপনার, LLM প্রোভাইডারের নয়। আগামী মাসে Claude থেকে GPT-তে গেলে আপনার ফাইলের ইতিহাস অক্ষত অবস্থায় সঙ্গে যায়, কারণ সেটি আপনার VPS-এ আছে — কোনো ভেন্ডরের স্টোরেজে নয়।
  • পরে আবার জিজ্ঞেস করা যায়। “তিন মাস আগে তুমি আমার জন্য একটা চুক্তি বিশ্লেষণ করেছিলে — এই নতুন খসড়ার সঙ্গে সেটা মিলিয়ে দেখবে?” — এমন অনুরোধ কাজ করে, কারণ মূল ফাইলটি এখনো ডিস্কে আছে। সাধারণ চ্যাটে পুরোনো ফাইল সাধারণত অনেক আগেই হারিয়ে যায়।
  • মডেল সবসময় এমন সংস্করণ পায় যা সে সবচেয়ে ভালোভাবে ব্যবহার করতে পারে। ছবি বুঝতে পারা মডেল পায় ছোট করা JPEG, টেক্সট পড়া মডেল পায় UTF-8, আর PDF পড়া মডেল পায় আসল PDF। ফোন থেকে HEIC আপলোড করলেও সোজাসুজি কাজ করে — ইমেজ ডিকোডার Pillow-এর HEIF প্লাগইন লোড করে, আর শনাক্তকারী বাইটের পরীক্ষা সেই ফোনগুলোকে ধরে ফেলে যেগুলো আপলোডকে ভুল করে application/octet-stream হিসেবে চিহ্নিত করে।

কোথায় আপনার ফাইল সামলাবেন

এজেন্টের ওয়েব প্যানেলে সেটিংস → ফাইল ম্যানেজার-এ একটি ফাইল ম্যানেজার আছে। এটি দিয়ে পুরো এজেন্ট VPS ব্রাউজ করা যায়; /var/lib/mintbot-agent/uploads/-এ থাকা আপলোড আর্কাইভ হলো সেই অংশ, যা আপনার কথোপকথনগুলো ভরে তোলে। সেখান থেকে আপনি:

  • ফোল্ডার ব্রাউজ করতে এবং ফাইল ডাউনলোড, নাম বদল, সরানো বা মুছে ফেলতে পারেন
  • ফোল্ডার তৈরি করতে পারেন
  • নতুন ফাইল টেনে এনে ছাড়তে পারেন — সেগুলো টুকরো টুকরো করে আপলোড হয়, প্রতি ফাইল 4 GB পর্যন্ত
  • ছোট টেক্সট ফাইল (1 MB পর্যন্ত) সরাসরি ব্রাউজারে সম্পাদনা করতে পারেন

আকারের সীমা: চ্যাটে সংযুক্ত ফাইল 500 MB পর্যন্ত হতে পারে; Telegram বটকে কেবল 20 MB পর্যন্ত ফাইল নিতে দেয়; ফাইল ম্যানেজার প্রতি ফাইল 4 GB পর্যন্ত নেয়। এর বাইরে একমাত্র সীমা আপনার ডিস্ক — সার্ভার যাতে চলতে থাকে সেজন্য mintbot সবসময় কিছুটা খালি জায়গা রেখে দেয়। ডিস্ক ভরে গেলে এজেন্ট আপনাকে জানায় এবং জায়গা খালি করার জন্য সরাসরি ফাইল ম্যানেজার-এর লিংক দেয় — অথবা আপনি সোজা এজেন্টকে পুরোনো ফাইল মুছে ফেলতে বলতে পারেন।

ফাইল ম্যানেজার-এ কোনো ফাইল মুছলে সেটি ডিস্ক থেকে সরে যায়, আর এজেন্ট সেটি আর LLM-কে দেখাতে পারে না। এটাই মূল ফাইলকে “আপনার” করে তোলে: মুছে ফেলার অধিকার শুধু আপনার।

মূল কথা

বেশিরভাগ AI চ্যাট প্রোডাক্ট আপনার আপলোডকে একবার ব্যবহার করে ফেলে দেওয়ার মতো কথোপকথনের কনটেক্সট হিসেবে দেখে। mintbot সেগুলোকে দেখে আপনার ডেটা হিসেবে — আপনার VPS-এ সংরক্ষিত, আপনার মালিকানায়, আর প্রয়োজনমতো ঠিক সেই রূপে বদলে নেওয়া যা মডেলের তখন দরকার। mintbot-এর অনেক আকর্ষণীয় ক্ষমতা এই ভিতের ওপরই দাঁড়িয়ে আছে।