মূল কনটেন্টে যান
এআই টিউটোরিয়াল

Verdict দিয়ে স্থানীয়ভাবে CLI ফলাফল শ্রেণিবদ্ধ করুন

Verdict ইনস্টল করা, Python বা CLI-এর মাধ্যমে কমান্ডের আউটপুট শ্রেণিবদ্ধ করা, এর চারটি ফলাফল লেবেল বোঝা এবং নির্ধারক যাচাই প্রতিস্থাপন না করে কোডিং এজেন্ট ও CI ওয়ার্কফ্লোতে এর স্থানীয় 197 KB মডেল যুক্ত করা শিখুন।

Verdict দিয়ে স্থানীয়ভাবে CLI ফলাফল শ্রেণিবদ্ধ করুন

Verdict কী করে

Verdict হলো কোডিং এজেন্ট, CI রানার এবং অন্যান্য টুল-ব্যবহারকারী সিস্টেমের জন্য একটি সেমান্টিক ফলাফল স্তরের গবেষণামূলক প্রিভিউ। কোনো প্রসেসের exit code-কে চূড়ান্ত প্রমাণ হিসেবে বিবেচনা না করে এটি কমান্ড, exit code, standard output এবং standard error একসঙ্গে পরীক্ষা করে।

মডেলটি চারটি লেবেলের একটি ফেরত দেয়: success, failure, blocked অথবা unknown। এই পার্থক্যটি গুরুত্বপূর্ণ, কারণ কোনো কমান্ড শূন্য কোডে শেষ হলেও কোনো টেস্ট না চালাতে পারে, HTTP 500 response ফেরত দিতে পারে, কোনো worker-এর জন্য অপেক্ষা করতে পারে অথবা অসম্পূর্ণ output তৈরি করতে পারে। একইভাবে, nonzero exit code কোনো ব্যর্থ assertion-এর পরিবর্তে পরিবেশগত বাধা নির্দেশ করতে পারে।

গুরুত্বপূর্ণ: Verdict একটি পরামর্শদাতা classifier। কোনো কাজ সম্পন্ন হয়েছে বা কোনো environment প্রত্যাশামতো পরিবর্তিত হয়েছে, এটি তা প্রমাণ করে না। Deterministic check এবং authoritative state verification-কে সত্যের উৎস হিসেবে রাখুন।

প্রধান বৈশিষ্ট্য

  • স্থানীয় inference: কোনো network call বা telemetry ছাড়াই স্থানীয় CPU-তে input প্রক্রিয়া করা হয়।
  • ক্ষুদ্র মডেল: Quantized model-টির আকার প্রায় 197 KB।
  • শূন্য-নির্ভরতা runtime: Inference-এ Python standard library ব্যবহার করা হয় এবং package নিজে ছাড়া কোনো tokenizer file, GPU বা অতিরিক্ত Python runtime dependency প্রয়োজন হয় না।
  • সেমান্টিক classification: মডেলটি শুধু exit code-এর ওপর নির্ভর না করে command, exit code, stdout এবং stderr বিবেচনা করে।
  • দ্রুত prediction: Repository-তে নথিভুক্ত Windows 11, AMD64 এবং Python 3.12 benchmark environment-এ median inference time 0.54 ms বলে উল্লেখ করা হয়েছে।
  • Python ও CLI interface: কোনো application-এ অথবা সরাসরি shell pipeline থেকে মডেল ব্যবহার করুন।
  • Browser demonstration: Project page কোনো log upload না করেই browser-এ একই quantized weight চালায়।

Verdict multiclass logistic regression-এর সঙ্গে hashed character 3–5-gram এবং word 1–3-gram ব্যবহার করে। এর input হলো UTF-8 text, এবং প্রতিটি output stream explicit head-and-tail clipping-এর মাধ্যমে 12,288 character-এ সীমাবদ্ধ।

চারটি লেবেল বুঝুন

  • success: Output-এ operation সম্পন্ন হওয়ার ইতিবাচক প্রমাণ রয়েছে।
  • failure: Operation চলেছে এবং একটি নির্দিষ্ট ব্যর্থতার কথা জানিয়েছে।
  • blocked: Permission, dependency, networking, quota limit অথবা environment execution-এ বাধা দিয়েছে।
  • unknown: Evidence অনুপস্থিত, অসম্পূর্ণ, এড়িয়ে যাওয়া হয়েছে, শুধু dry run-এ সীমাবদ্ধ অথবা অন্যভাবে সিদ্ধান্তে পৌঁছানোর জন্য অপর্যাপ্ত।

ফেরত দেওয়া probability একটি linear multiclass model থেকে আসে। নিরাপত্তা-গুরুত্বপূর্ণ সিদ্ধান্তের জন্য এগুলোকে calibrated confidence হিসেবে ব্যাখ্যা করা উচিত নয়।

Verdict ইনস্টল করুন

Repository clone করুন, তার directory-তে প্রবেশ করুন এবং pip দিয়ে package install করুন:

git clone https://github.com/Balanov/verdict.git
cd verdict
python -m pip install .

এতে verdict_tiny Python package এবং verdict command-line interface install হবে।

প্রথম Python prediction চালান

একটি Verdict instance তৈরি করুন এবং আপনার tool runner যে একই evidence পর্যবেক্ষণ করেছে তা pass করুন। এই উদাহরণে একটি সফল pytest process দেখানো হয়েছে, যা আসলে কোনো test চালায়নি:

from verdict_tiny import Verdict

model = Verdict()
result = model.predict(
    command="pytest tests/",
    exit_code=0,
    stdout="collected 0 items\nno tests ran in 0.01s",
)
print(result)

নথিভুক্ত model output এই evidence-কে unknown হিসেবে classify করে, যদিও exit code শূন্য:

{
  "label": "unknown",
  "confidence": 0.999981,
  "probabilities": {
    "success": 0.000019,
    "failure": 0.0,
    "blocked": 0.0,
    "unknown": 0.999981
  },
  "advisory": true
}

label হলো নির্বাচিত outcome। probabilities object প্রতিটি class-এর score প্রকাশ করে, আর advisory জোর দিয়ে জানায় যে prediction কোনো authoritative proof নয়।

Command line থেকে Verdict ব্যবহার করুন

মূল command এবং exit code সরবরাহ করে command output Verdict-এ pipe করতে পারেন:

printf 'collected 0 items\nno tests ran\n' | verdict \
  --command 'pytest tests/' --exit-code 0

আগে থেকেই file-এ সংরক্ষিত output-এর জন্য --stdout এবং --stderr ব্যবহার করুন:

verdict \
  --command 'pytest tests/' \
  --exit-code 0 \
  --stdout output.log \
  --stderr error.log

নির্দিষ্ট location থেকেও weight load করতে পারেন:

verdict \
  --command 'pytest tests/' \
  --exit-code 0 \
  --stdout output.log \
  --stderr error.log \
  --weights /path/to/verdict-q8.bin

নিরাপদে Verdict integrate করুন

একটি ব্যবহারিক integration-এ Verdict-কে চূড়ান্ত বিচারক নয়, বরং অতিরিক্ত decision signal হিসেবে বিবেচনা করা উচিত। কোনো coding agent বা CI runner label ব্যবহার করে আরও evidence পরীক্ষা করবে, কোনো operation পুনরায় চালাবে অথবা মানুষের review চাইবে কি না তা নির্ধারণ করতে পারে।

  1. মূল command চালান এবং তার exit code, stdout ও stderr সংরক্ষণ করুন।
  2. সমস্ত উপলব্ধ evidence Verdict-এ pass করুন।
  3. Predicted label এবং class probability দুটিই পরীক্ষা করুন।
  4. গুরুত্বপূর্ণ action নেওয়ার আগে application-specific threshold প্রয়োগ করুন।
  5. Test count, generated file, API state অথবা database record-এর মতো deterministic check দিয়ে completion যাচাই করুন।

উদাহরণস্বরূপ, unknown result সাধারণত completion claim করার পরিবর্তে আরও investigation শুরু করবে। Retry করার আগে blocked result credential, dependency, connectivity, permission অথবা quota পরীক্ষা করার কারণ হতে পারে। Correctness গুরুত্বপূর্ণ হলে success result-এর পরও authoritative verification প্রয়োজন।

উন্নত টিপস

সম্পূর্ণ এক্সিকিউশন কনটেক্সট সংরক্ষণ করুন

সম্ভব হলে প্রকৃত কমান্ড, এক্সিট কোড, stdout এবং stderr প্রদান করুন। স্ট্রিম বাদ দিলে এমন প্রমাণ হারিয়ে যেতে পারে, যা নির্দিষ্ট ব্যর্থতা, পরিবেশগত বাধা এবং অনির্ণায়ক রানকে আলাদা করতে সহায়তা করে।

ইনপুট ক্লিপিং বিবেচনায় রাখুন

head-and-tail ক্লিপিং ব্যবহার করে প্রতিটি আউটপুট স্ট্রিম ১২,২৮৮ অক্ষরে সীমাবদ্ধ থাকে। লগ খুব বড় হলে নিশ্চিত করুন যে নির্ণায়ক বার্তাগুলো শুরুতে বা শেষে রয়েছে, অথবা সম্পূর্ণ লগে একটি অতিরিক্ত নির্ধারিত স্ক্যান চালান।

রক্ষণশীল সিদ্ধান্তের থ্রেশহোল্ড নির্ধারণ করুন

সম্ভাবনাগুলো নিরাপত্তা-গুরুত্বপূর্ণ অর্থে ক্যালিব্রেটেড আত্মবিশ্বাসের মাত্রা নয়। আপনার কর্মপ্রবাহের উপযোগী থ্রেশহোল্ড ব্যবহার করুন এবং অনিশ্চিত বা গুরুত্বপূর্ণ ঘটনাগুলো নির্ধারিত যাচাই অথবা মানব পর্যালোচনার জন্য পাঠান।

কাস্টম বা ডাউনলোড করা ওয়েট ব্যবহার করুন

প্রকাশিত quantized ওয়েটগুলো weights/verdict-q8.bin-এ সংরক্ষিত এবং Hugging Face-এও পাওয়া যায়। CLI-তে --weights ব্যবহার করে বিকল্প ওয়েট পাথ গ্রহণ করা হয়।

ব্রাউজার ডেমো ব্যবহার করে দেখুন

Verdict প্রকল্পের পৃষ্ঠা ব্রাউজারে একই quantized ওয়েট চালায়। প্রকল্পের ডকুমেন্টেশন অনুযায়ী, লগ আপলোড করা হয় না।

ট্রেনিং ও মূল্যায়ন পুনরুৎপাদন করুন

ট্রেনিং ও ডেভেলপমেন্টের অতিরিক্ত প্যাকেজ ইনস্টল করুন, সিন্থেটিক করপাস পুনরায় তৈরি করুন, মডেল ট্রেন করুন, int8 ওয়েট রপ্তানি করুন, আর্টিফ্যাক্ট মূল্যায়ন করুন এবং টেস্ট চালান:

python -m pip install -e '.[train,dev]'
python training/train.py
pytest -q

সর্বজনীন বেঞ্চমার্কে ট্রেনিংয়ে অনুপস্থিত ৪৮টি CLI পরিবারের ১৯২টি সিন্থেটিক উদাহরণ ব্যবহার করা হয়েছে। ট্রেনিংয়ে ৬০টি ভিন্ন পরিবারের ১,৪৪০টি সিন্থেটিক উদাহরণ ব্যবহার করা হয়েছে। প্রতিবেদিত quantized মডেল ৯৩.২% accuracy এবং ৯৩.২% macro-F1 অর্জন করেছে, যেখানে exit-code baseline-এর accuracy ছিল ৪৭.৯% এবং macro-F1 ছিল ৩১.৯%।

করপাসটি সিন্থেটিক এবং ইংরেজি-নির্ভর। এই পরিমাপগুলো সংরক্ষিত টেমপ্লেট মূল্যায়ন করে, প্রোডাকশন এজেন্ট ট্রেসে নির্ভরযোগ্যতা নয়; latency ফলাফলও সব হার্ডওয়্যারের জন্য নিশ্চয়তা নয়।

প্রকল্পের সীমাবদ্ধতা জানুন

Verdict ইচ্ছাকৃতভাবে সীমিত পরিসরের। এটি CLI আউটপুটে পর্যবেক্ষিত প্রমাণ শ্রেণিবদ্ধ করে, কিন্তু বৃহত্তর কোনো কাজ সম্পন্ন হয়েছে কি না তা নির্ধারণ করে না। এটি কোডের সঠিকতা, নিরাপত্তা বা সত্যতাও প্রতিষ্ঠা করে না।

তাই Verdict কাঁচা প্রসেস এক্সিকিউশন এবং এজেন্টের পরবর্তী কাজের মধ্যে একটি semantic layer হিসেবে ব্যবহারের জন্য সবচেয়ে উপযোগী। এটি এমন প্রমাণ শনাক্ত করতে পারে যা একটি exit code ধরতে পারে না, তবে টেস্ট, স্টেট পরিদর্শন, যাচাইয়ের নিয়ম এবং মানবিক বিচারবুদ্ধির পরিপূরক হিসেবে ব্যবহার করা উচিত, বিকল্প হিসেবে নয়।

উপসংহার

Verdict exit-code-only যাচাইয়ের তুলনায় CLI ফলাফল আরও সতর্কভাবে ব্যাখ্যা করার জন্য একটি ছোট, দ্রুত, স্থানীয় উপায় প্রদান করে। এটি Python প্যাকেজ হিসেবে ইনস্টল করুন, সম্পূর্ণ এক্সিকিউশন কনটেক্সট দিন এবং পরবর্তী কাজ নির্দেশ করতে এর চারটি লেবেল ব্যবহার করুন। নির্ভরযোগ্য অটোমেশনের জন্য এর পরামর্শমূলক ফলাফল সবসময় নির্ধারিত ও কর্তৃত্বপূর্ণ যাচাইয়ের সঙ্গে মিলিয়ে ব্যবহার করুন।