gitai কী?
gitai হলো AI কোডিং এজেন্টদের জন্য তৈরি একটি ওপেন-সোর্স ভার্সন কন্ট্রোল সিস্টেম। এটি সার্ভার-কেন্দ্রিক পদ্ধতি অনুসরণ করে, যেখানে ক্লায়েন্টগুলো অনলাইনে থাকে, কেবল প্রয়োজনীয় অবজেক্ট ও পাথ সংগ্রহ করে এবং সোর্স-কন্ট্রোলের কাজগুলো সার্ভারে পাঠায়।
প্রকল্পটি Anthropic-এর Scion-এর প্রকাশ্যে বর্ণিত নকশা থেকে অনুপ্রাণিত, তবে gitai একটি স্বতন্ত্র বাস্তবায়ন। এটি MIT লাইসেন্সপ্রাপ্ত, কোনো নির্দিষ্ট ভেন্ডরের ওপর নির্ভরশীল নয় এবং সার্ভারকে কোনো ভাষা মডেল কল করতে হয় না। AI-চালিত কাজগুলো যেকোনো প্রোভাইডার, একটি নির্ধারিত টুল, অথবা কোনো AI প্রোভাইডার ছাড়াই সম্পন্ন করা যায়।
অভ্যন্তরীণভাবে gitai সাধারণ Git রিপোজিটরি ব্যবহার করে, কিন্তু ইতিহাস অনুসন্ধান, ল্যান্ডিং, চেঞ্জসেট ট্র্যাকিং এবং রিপোজিটরি সমন্বয়ের কাজ সার্ভারে স্থানান্তর করে। এই মডেলটি এমন ওয়ার্কলোডের জন্য তৈরি, যেখানে অনেক স্বল্পস্থায়ী কাজকে শেয়ার করা ব্রাঞ্চে দ্রুত ল্যান্ড করতে হয়।
প্রধান বৈশিষ্ট্য
- নির্বাচিত ডেটা অ্যাক্সেস: অবজেক্ট সার্ভিস পৃথক অবজেক্ট ও স্পার্স ট্রি সরবরাহ করে।
graft cloneএবংgraft sparseকমান্ড কেবল অনুরোধ করা পাথগুলোকে উপাদান হিসেবে তৈরি করে। - সার্ভার-সাইড ইতিহাস: blame, পাথের ইতিহাস, পূর্বপুরুষ অনুসন্ধান এবং কোড সার্চ সার্ভারে চলে এবং ডেরাইভড ডেটা হিসেবে মেমোয়াইজ করা হয়।
- সমসাময়িক ল্যান্ডিং:
UserLandপরিবর্তনগুলোকে বর্তমান ব্রাঞ্চ টিপের ওপর রিবেস করে এবং প্রচলিত মার্জ কিউয়ের বদলে compare-and-swap আপডেট ব্যবহার করে। একাধিক সমসাময়িক ল্যান্ডকে একটি রেফারেন্স আপডেটে ব্যাচ করা যায়। - কনফ্লিক্ট সমাধান: কনফ্লিক্টযুক্ত ল্যান্ডগুলো ভার্সনযুক্ত, ভেন্ডর-নিরপেক্ষ প্রোটোকলের মাধ্যমে নির্বাচিত রিজলভার ব্যবহার করতে পারে।
- চেঞ্জসেট লগ: গৃহীত রেফারেন্স আপডেটগুলো তাদের অপারেশন ও অ্যাক্টরের তথ্য একটি ক্রমসজ্জিত লগে সংরক্ষণ করে, যা ক্লায়েন্ট তালিকাভুক্ত বা পর্যবেক্ষণ করতে পারে।
- স্কেলযোগ্য স্টোরেজ: SQLite বা PostgreSQL চেঞ্জসেট, রেফারেন্স, রিভিউ এবং write-ahead log সংরক্ষণ করে, আর কনটেন্ট-অ্যাড্রেসড প্যাক ফাইল স্টোরেজ, S3, GCS বা Azure-এ থাকতে পারে।
- এজেন্ট নিয়ন্ত্রণ: প্রতি-এজেন্ট টোকেন, RPC allowlist এবং ব্রাঞ্চ নীতি নির্ধারণ করে এজেন্টরা কোন অপারেশন করতে পারবে।
- যাচাই ও পর্যবেক্ষণ:
graft-verifyটিপ পরীক্ষা করতে, ব্যর্থতার কারণ খুঁজতে bisect চালাতে এবং দায়ী পরিবর্তনটি revert করতে পারে। সুপারফ্যান নামে পরিচিত মনিটরিং এজেন্টগুলো চেঞ্জসেট স্ট্রিম অনুসরণ করে এবং Slack-এর মাধ্যমে রিপোর্ট করতে পারে। - কঠোর ক্যাশিং:
graft-cacheপ্রতিটি অবজেক্ট যাচাই করার সময় ডেমন ও আঞ্চলিক স্তরে অপরিবর্তনীয় অবজেক্ট ক্যাশ করতে পারে।
আর্কিটেকচার কীভাবে কাজ করে
এজেন্ট, CI কাজ এবং স্পার্স ওয়ার্কস্পেসগুলো Graft CLI অথবা gRPC-এর মাধ্যমে Go SDK ব্যবহার করে gitai সার্ভারের সঙ্গে যোগাযোগ করে। অতিরিক্ত ক্যাশ স্তর সরবরাহের জন্য সার্ভারের সামনে ঐচ্ছিক graft-cache ডেমন রাখা যায়।
সার্ভার ল্যান্ডিং, অবজেক্ট অ্যাক্সেস, চেঞ্জসেট, ডেরাইভড ডেটা, সার্চ এবং রিভিউ পরিচালনা করে। এর write path প্রতিটি রেফারেন্সের জন্য একটি চেঞ্জসেটকে compare-and-swap অপারেশনের সঙ্গে যুক্ত করে। ডেটাবেস স্টোরেজে চেঞ্জসেট write-ahead log, রেফারেন্স, চেঞ্জলগ এবং রিভিউ থাকে। অবজেক্ট স্টোরেজে কনটেন্ট-অ্যাড্রেসড প্যাক থাকে।
সার্ভার নোডগুলোকে এমন স্টেটলেস ক্যাশ হিসেবে তৈরি করা হয়েছে, যেগুলো পুনর্নির্মাণ করা যায়। ফলে ডিপ্লয়মেন্ট বড় হলে অতিরিক্ত নোড যোগ করা সম্ভব। স্থানীয় Git রিপোজিটরিগুলো ক্যাশ হিসেবে উপলভ্য থাকে, যা যেকোনো নোড পুনর্নির্মাণ করতে পারে।
আরও বিস্তারিত জানতে প্রকল্পের আর্কিটেকচার ডকুমেন্টেশন এবং স্টোরেজ ডকুমেন্টেশন পড়ুন।
gitai ইনস্টল ও বিল্ড করুন
1. পূর্বশর্ত ইনস্টল করুন
gitai-এর জন্য বর্তমানে Linux অথবা macOS, Go 1.26, একটি C toolchain, Meson এবং Ninja প্রয়োজন। বিল্ডটি Git-এর একটি বান্ডেল করা সংস্করণ কম্পাইল করে, তাই শুরু করার আগে প্রয়োজনীয় নেটিভ বিল্ড টুলগুলো উপলভ্য আছে তা নিশ্চিত করুন।
2. রিপোজিটরি ক্লোন করুন
git clone https://github.com/feder-cr/git-ai.git
cd git-ai3. বাইনারি বিল্ড করুন
সার্ভার, CLI এবং সহায়ক টুলগুলো বিল্ড করতে Make target চালান:
make buildতৈরি হওয়া বাইনারিগুলো _build/bin-এ রাখা হয়। CLI এবং উপলভ্য কমান্ডগুলো দেখতে চালান:
./_build/bin/graftকুইকস্টার্ট চালান
রিপোজিটরিতে একটি উদাহরণ রয়েছে, যা একটি সার্ভার, একটি ক্যাশ ডেমন, দুটি এজেন্ট এবং একটি ল্যান্ড অপারেশনসহ অস্থায়ী gitai পরিবেশ চালু করে:
examples/graft/quickstart.shস্থায়ী ডেটাবেস, অবজেক্ট স্টোর অথবা ডিপ্লয়মেন্ট প্রস্তুত না করেই মূল ওয়ার্কফ্লো দেখার এটি দ্রুততম উপায়। উদাহরণটি একটি অস্থায়ী ডিরেক্টরি ব্যবহার করে, তাই শেখা ও পরীক্ষা-নিরীক্ষার জন্য এটি সবচেয়ে উপযোগী।
নিজস্ব সার্ভার চালান
1. উদাহরণ কনফিগারেশন দিয়ে শুরু করুন
কাস্টম সার্ভার কনফিগারেশনের ভিত্তি হিসেবে examples/graft/config.toml ব্যবহার করুন। বিল্ড করা বাইনারি দিয়ে সার্ভার চালানো যায়:
_build/bin/gitaly serve config.tomlসোর্স ট্রির মধ্যে সার্ভার-সাইড এক্সটেনশনগুলোকে Graft বলা হয়। [graft] কনফিগারেশন সেকশন, graft CLI, internal/graft প্যাকেজ এবং Graft ডকুমেন্টেশনে এই নামটি দেখতে পাবেন।
2. ডেটাবেস ও অবজেক্ট স্টোরেজ যোগ করুন
রিপোজিটরি স্টেট ডেটাবেস ও অবজেক্ট স্টোরেজে সংরক্ষিত থাকবে এমন ডিপ্লয়মেন্টের জন্য কনফিগারেশনে একটি [graft.storage] সেকশন যোগ করুন। নথিভুক্ত মাইগ্রেশন প্রক্রিয়ায় প্রথমে shadow মোডে শুরু করে রিপোজিটরি ইম্পোর্ট করতে হয়, তারপর authoritative মোডে পরিবর্তন করতে হয়।
সঠিক কনফিগারেশন ও মাইগ্রেশনের বিবরণের জন্য স্টোরেজ গাইড অনুসরণ করুন। সমর্থিত স্টোরেজ মডেল সমন্বয় ডেটার জন্য SQLite অথবা PostgreSQL এবং কনটেন্ট-অ্যাড্রেসড প্যাকের জন্য ফাইল, S3, GCS অথবা Azure স্টোরেজ ব্যবহার করে।
এজেন্টের পরিবর্তন নিয়ে কাজ করুন
একটি প্রচলিত Git ওয়ার্কফ্লোতে, প্রতিটি কর্মী একটি রিপোজিটরি ক্লোন করে, স্থানীয়ভাবে ডেভেলপ করে এবং একটি শেয়ার্ড ব্রাঞ্চে পুশ করতে পারে। gitai-এর পরিবর্তে এজেন্টদের সার্ভারের সঙ্গে সংযুক্ত থাকতে এবং তাদের প্রয়োজনীয় ডেটাই কেবল অনুরোধ করতে দেয়।
এজেন্টরা ম্যাটেরিয়ালাইজড পাথ সীমিত করতে স্পার্স ওয়ার্কস্পেস ব্যবহার করতে পারে। প্রাসঙ্গিক কমান্ডগুলো হলো:
- রিপোজিটরির নির্বাচিত ভিউ ম্যাটেরিয়ালাইজ করতে
graft clone। - কাজের জন্য প্রয়োজনীয় পাথগুলোই অনুরোধ বা সমন্বয় করতে
graft sparse।
কোনো এজেন্ট অবদান রাখার জন্য প্রস্তুত হলে, UserLand পরিবর্তনটিকে বর্তমান টিপের ওপর রিবেস করে এবং একটি compare-and-swap আপডেট করার চেষ্টা করে। একই ব্রাঞ্চে একাধিক এজেন্ট একই সময়ে পরিবর্তন ল্যান্ড করলে, gitai প্রতিটি এজেন্টকে আলাদা মার্জ কিউয়ের মধ্য দিয়ে না পাঠিয়ে ওই অপারেশনগুলোকে একটি রেফারেন্স আপডেটে ব্যাচ করতে পারে।
ল্যান্ড করার সময় কনফ্লিক্ট তৈরি হলে, কনফ্লিক্ট-রেজোলিউশন ডকুমেন্টেশন অনুযায়ী একটি রিজলভার কনফিগার করুন। রিজলভারটি কোনো LLM প্রোভাইডার, একটি নির্ধারিত টুল, অথবা কোনো বাহ্যিক AI প্রোভাইডার ছাড়াই তৈরি হতে পারে।
চেঞ্জসেট, রিভিউ এবং ভেরিফিকেশন দেখুন
চেঞ্জসেটের ইতিহাস
প্রতিটি গৃহীত রেফারেন্স আপডেট চেঞ্জসেট লগে একটি এন্ট্রিতে পরিণত হয়। এন্ট্রিতে অপারেশন এবং অভিনেতার তথ্য থাকে, যা ক্লায়েন্টদের তালিকাভুক্ত বা লাইভ পর্যবেক্ষণযোগ্য একটি ক্রমবদ্ধ রেকর্ড দেয়। এই স্ট্রিম নির্দিষ্ট কম্পোনেন্টের সঙ্গে সম্পর্কিত পরিবর্তন অনুসরণকারী মনিটরিং এজেন্টগুলোকেও চালিত করতে পারে।
রিভিউ এবং নীতিমালা
gitai-তে সেমান্টিক অনুমোদন নিয়মসহ এজেন্ট-বান্ধব রিভিউ রয়েছে। উদাহরণস্বরূপ, শুধু মন্তব্যের পরিবর্তনের জন্য লজিক পরিবর্তনের তুলনায় কম অনুমোদন প্রয়োজন হতে পারে। এজেন্ট নিরাপত্তা নিয়ন্ত্রণের মধ্যে প্রতি-এজেন্ট টোকেন, RPC অ্যালাওলিস্ট এবং ব্রাঞ্চ নীতিমালাও রয়েছে।
স্বয়ংক্রিয় ব্যবহারকারীদের জন্য সার্ভার উন্মুক্ত করার আগে রিভিউ ডকুমেন্টেশন এবং এজেন্ট নিরাপত্তা ডকুমেন্টেশন পড়ুন।
ল্যান্ড করার পর ভেরিফিকেশন
graft-verify ওয়ার্কফ্লো পরিবর্তন ল্যান্ড করার পর ব্রাঞ্চের টিপ পরীক্ষা করে। কোনো পরীক্ষা ব্যর্থ হলে, এটি পরিবর্তনগুলো বাইসেক করতে এবং যে পরিবর্তনটি ব্যর্থতা তৈরি করেছে তা রিভার্ট করতে পারে। এর ফলে এমন একটি ওয়ার্কফ্লো সম্ভব হয় যেখানে ইন্টিগ্রেশন ধারাবাহিকভাবে ঘটে এবং সিস্টেমটি ভাঙা টিপের জন্য দায়ী পরিবর্তন শনাক্ত করে।
সমর্থিত ওয়ার্কফ্লো এবং কনফিগারেশনের জন্য ভেরিফিকেশন গাইড দেখুন।
উন্নত ডিপ্লয়মেন্ট টিপস
- সচেতনভাবে ক্যাশিং ব্যবহার করুন: ডেমন বা আঞ্চলিক ক্যাশ টিয়ারজুড়ে এজেন্ট বা CI জবগুলোর অপরিবর্তনীয় অবজেক্টে দ্রুত প্রবেশাধিকার প্রয়োজন হলে
graft-cacheযোগ করুন। - সমন্বয়কে অবজেক্ট স্টোরেজ থেকে আলাদা রাখুন: চেঞ্জসেট এবং রেফারেন্সের জন্য SQLite বা PostgreSQL ব্যবহার করুন, এবং রিপোজিটরি প্যাকের জন্য অবজেক্ট-স্টোরেজ ব্যাকএন্ড কনফিগার করুন।
- অতিরিক্ত নোড দিয়ে স্কেল করুন: সার্ভার নোডগুলো পুনর্নির্মাণযোগ্য ক্যাশ হিসেবে নকশা করা হয়েছে, তাই প্রতিটি নোডকে আলাদা অথরিটেটিভ স্টেট ধারণ করাতে না হয়েই নোড যোগ করা যায়।
- ল্যান্ডিং ডকুমেন্টেশন পড়ুন: ল্যান্ডিং এবং ব্যাচিং গাইড-এ compare-and-swap ওয়ার্কফ্লো এবং সমকালীন আপডেট ব্যাখ্যা করা হয়েছে।
- বর্তমান সীমাবদ্ধতাগুলো পর্যালোচনা করুন: এটি 0.1.0 সংস্করণ, 1.0-এর আগে ইন্টারফেস পরিবর্তিত হতে পারে, এবং প্যাকের গারবেজ কালেকশনের মতো পরিচিত ঘাটতিগুলো LIMITATIONS.md-এ নথিভুক্ত রয়েছে।
- ডিজাইন ডকুমেন্ট ব্যবহার করুন: PLAN.md থেকে PLAN6.md পর্যন্ত ডকুমেন্টগুলো বাস্তবায়নের যুক্তি এবং বিবর্তন ব্যাখ্যা করে।
উপসংহার
gitai বহু সমকালীন কোডিং এজেন্টের কাজ করা রিপোজিটরির জন্য সার্ভার-কেন্দ্রিক সোর্স-কন্ট্রোল মডেল মানিয়ে নেয়। এর Graft CLI এবং সার্ভার স্পার্স ডেটা অ্যাক্সেস, সার্ভার-সাইড ইতিহাস, compare-and-swap ল্যান্ডিং, কনফ্লিক্ট রেজোলিউশন, চেঞ্জসেট লগ, রিভিউ, ভেরিফিকেশন এবং স্কেলযোগ্য স্টোরেজ প্রদান করে।
make build এবং examples/graft/quickstart.sh দিয়ে শুরু করুন। ওয়ার্কফ্লো বুঝে গেলে কনফিগার করা সার্ভার এবং স্থায়ী স্টোরেজে যান। আরও গভীর বাস্তবায়ন ও অপারেশনাল নির্দেশনার জন্য প্রকল্পের Quickstart, কনফিগারেশন রেফারেন্স এবং আর্কিটেকচার ডকুমেন্টেশন ব্যবহার করুন।
