প্রকল্প সম্পর্কে

## এটি কী ChatGPT Subtitle Translator হলো OpenAI ChatGPT API (বা যেকোনো OpenAI-সামঞ্জস্যপূর্ণ চ্যাট কমপ্লিশন এন্ডপয়েন্ট, যার মধ্যে একটি স্থানীয় Ollama ইনস্ট্যান্স অন্তর্ভুক্ত) কে কেন্দ্র করে তৈরি একটি অনুবাদ ইউটিলিটি। এর মূল লক্ষ্য হলো লাইন-ভিত্তিক অনুবাদ, বিশেষত SRT সাবটাইটেল, যেখানে ইনপুট এবং আউটপুট লাইনের মধ্যে সংযোগ বজায় রাখা সাবটাইটেল টাইমিং অক্ষুণ্ণ রাখার জন্য গুরুত্বপূর্ণ। ## এটি কীভাবে কাজ করে মডেলে পাঠানোর আগে SRT ইনডেক্স এবং টাইমস্ট্যাম্পগুলি টোকেন ব্যবহার কমাতে সরিয়ে দেওয়া হয় বা সরল করা হয়। লাইনগুলি একটি একক প্রম্পটের ভেতরে ব্যাচে গোষ্ঠীবদ্ধ করা হয়, যা প্রতিটি এন্ট্রির পুনরাবৃত্তিমূলক ওভারহেড দূর করে এবং অতিরিক্ত টোকেন খরচ ছাড়াই যেকোনো দৈর্ঘ্যের ফাইল অনুবাদ করার অনুমতি দেয়। ডিফল্ট সিস্টেম নির্দেশনা হলো একটি ন্যূনতম `Translate to <language>`। `--structured` এর মাধ্যমে পাঁচটি স্ট্রাকচার্ড মোড নির্বাচনযোগ্য: - `array` (ডিফল্ট): লাইনগুলি একটি JSON অ্যারে হিসেবে পাঠানো হয় এবং মডেল একটি মিলিত অ্যারে ফেরত দেয়। - `object`: সোর্স লাইনগুলি রেসপন্স স্কিমায় কী হয়ে যায়, তাই কোনো স্পষ্ট ইউজার মেসেজ পাঠানো হয় না। - `timestamp`: টাইমিং টেক্সটের পাশাপাশি একটি কম্প্যাক্ট Toon ফরম্যাট ব্যবহার করে সংরক্ষিত থাকে, যেখানে ব্যাচ অফসেট এবং প্রতিটি এন্ট্রির অফসেট/দৈর্ঘ্য মিলিসেকেন্ডে থাকে; মডেল সংলগ্ন এন্ট্রিগুলি একত্রিত করতে পারে। রিট্রাই শুধুমাত্র তখনই ঘটে যখন আউটপুট টাইম-স্প্যান বাউন্ডারি ইনপুটের সাথে মেলে না। - `agent`: ডিফল্ট অপশন সহ agent সাবকমান্ডের জন্য একটি উপনাম। - `none`: স্ট্রাকচার্ড আউটপুট ছাড়া লিগেসি মোড। ## বৈশিষ্ট্যসমূহ - ওয়েব UI (GitHub Pages-এ হোস্ট করা) এবং CLI - স্ট্রাকচার্ড আউটপুট সাপোর্ট, উভয় ইন্টারফেসে ডিফল্টরূপে সক্রিয় - প্রম্পট ক্যাশিং সাপোর্ট, `-c, --context` দিয়ে নিয়ন্ত্রিত (শুধুমাত্র CLI) - যেকোনো OpenAI API সামঞ্জস্যপূর্ণ প্রোভাইডারের সাথে কাজ করে, যেমন স্থানীয় Ollama - কন্টেক্সট টোকেন বাজেট থেকে স্বয়ংক্রিয় ব্যাচ সাইজিং সহ লাইন-ভিত্তিক ব্যাচিং - ঐচ্ছিক OpenAI Moderation চেক (`--use-moderator`, শুধুমাত্র CLI) সম্ভাব্য প্রত্যাখ্যানে টোকেন নষ্ট এড়াতে - স্ট্রিমিং প্রসেস আউটপুট - প্রতি-মিনিট রিকোয়েস্ট রেট লিমিটিং - প্রগ্রেস রিজিউমেশন (শুধুমাত্র CLI) - স্ট্রিমিং চলাকালীন রিপিটিশন-লুপ ডিটেকশন (`--guard-repetition`) ## এজেন্ট মোড `agent` সাবকমান্ড অনুবাদের আগে একাধিক পাস চালায়: একটি ওভারভিউ পাস ফাইলটি স্যাম্পল করে কন্টেন্ট, সময়কাল, ধরন/স্বর এবং চরিত্রের নাম চিহ্নিত করে এবং সোর্স ভাষা সনাক্ত করে; একটি প্ল্যানিং পাস টোকেন-সীমাবদ্ধ উইন্ডোতে ফাইলটি স্ক্যান করে, ব্যাচ সারাংশ তৈরি করে যা একটি পরিমার্জিত অনুবাদ নির্দেশনায় একত্রিত হয়; অনুবাদ পাস তারপর সেই সমৃদ্ধ নির্দেশনা ব্যবহার করে এবং প্রথম ব্যাচের পরে টার্গেট ভাষা যাচাই করে। অপশনগুলির মধ্যে রয়েছে `--no-refine`, `--no-fitting` এবং `--context-summary`। ## সেটআপ এবং ব্যবহার Node.js >= 20 প্রয়োজন। ক্লোন করার পরে, `npm install` চালান, `cli/translator.mjs` কে এক্সিকিউটেবল করুন, `.env.example` কে `.env`-এ কপি করুন এবং একটি API কী যোগ করুন। সাধারণ ইনভোকেশনগুলির মধ্যে রয়েছে `cli/translator.mjs --input subtitles.srt --from Japanese --to English`, `--plain-text` এর মাধ্যমে সাধারণ টেক্সট ইনপুট, এবং `--system-instruction` এর মাধ্যমে কাস্টম নির্দেশনা। মডেল, টেম্পারেচার, top_p, পেনাল্টি এবং লজিট বায়াস স্ট্যান্ডার্ড OpenAI প্যারামিটারের মাধ্যমে কনফিগার করা যেতে পারে।