
Jeeves কী?
Jeeves হলো একটি Jev-ধাঁচের ক্লাসিফায়ার, যা কাঠামোবদ্ধ সিদ্ধান্ত নেওয়ার আগে একটি যুক্তির ধারা তৈরি করে। এটি LoRA অ্যাডাপ্টার, একটি pointer head, calibrated probabilities এবং একটি block-4 diffusion drafter-সহ Qwen3.5-9B দিয়ে তৈরি। রিপোজিটরিতে মডেল ও drafter-এর কোড, প্রশিক্ষণ পাইপলাইন, মূল্যায়ন টুল এবং train, development ও test ডেটা রয়েছে।
প্রকল্পটি এমন অ্যাপ্লিকেশনের জন্য তৈরি, যেগুলোর শুধু free-form text generation-এর চেয়ে বেশি কিছু প্রয়োজন। একটি shared state এবং এক বা একাধিক প্রশ্ন দেওয়া হলে, Jeeves একটি Jev-compatible API-এর মাধ্যমে কাঠামোবদ্ধ উত্তর ও সম্ভাবনা ফেরত দেয়। একই অনুরোধে একাধিক প্রশ্ন প্রক্রিয়া করা যায়।
প্রধান বৈশিষ্ট্য
- তিন ধরনের সিদ্ধান্ত: binary
noul, categoricalchoiceএবং ordinalscoreপ্রশ্ন। - সিদ্ধান্তের আগে যুক্তি: মডেল একটি যুক্তির ধারা তৈরি করতে পারে এবং এরপর pointer head ব্যবহার করে উপলভ্য বিকল্পগুলোর স্কোর নির্ধারণ করতে পারে।
- Calibrated output: চূড়ান্ত বিকল্পের সম্ভাবনা development set-এ নির্ধারিত temperature ব্যবহার করে গণনা করা হয়।
- Jev-compatible API: বিদ্যমান Jev client-গুলো মূল request format জমা দিতে পারে, আর Jeeves-নির্দিষ্ট option-গুলো যুক্তি নিয়ন্ত্রণ করে।
- Python SDK: অন্তর্ভুক্ত
sdk/package-টি Jev-এরtypesafe-sdk-এর সরাসরি বিকল্প হিসেবে ব্যবহার করা যায়। - Diffusion drafting: একটি block-4 drafter যুক্তির ধারা তৈরি দ্রুত করে এবং Qwen3.5-এর Gated DeltaNet layer সমর্থন করে।
- Training code: রিপোজিটরিতে SFT, CISPO, calibration, evaluation, export এবং drafter-training component রয়েছে।
Greedy reasoning সর্বোচ্চ 2,560 token-এ সীমাবদ্ধ রাখলে, README-তে held-out ও out-of-domain test set-এ 0.889 accuracy এবং 231টি public JevBench item-এ 0.935 accuracy রিপোর্ট করা হয়েছে। তবে MMLU এবং MMLU-Pro-তে এর knowledge ফলাফল Jev-এর তুলনায় পিছিয়ে, তাই benchmark-এর উপযোগিতা কাজের ওপর নির্ভর করে।
পূর্বশর্ত
আপনার Python 3.12 এবং একটি CUDA GPU প্রয়োজন। inference implementation-এর FP8 kernel-এর জন্য একটি Hopper GPU প্রয়োজন। রিপোজিটরির root directory থেকে নিচের command-গুলো চালান।
Dependency ইনস্টল করুন
pip install -r requirements.txt
প্রকাশিত weight ডাউনলোড করুন
প্রকাশিত 9B checkpoint এবং এর block-4 drafter ডাউনলোড করতে Hugging Face CLI ব্যবহার করুন:
hf download PostHog/jeeves --local-dir jeeves-weights
প্রকাশিত মডেলটি Hugging Face-এ পাওয়া যায়।
API server চালু করুন
python -m inference.serve --model jeeves-weights --drafter jeeves-weights/drafter_k4.safetensors --port 8009
এতে port 8009-এ Jev-compatible service চালু হবে। অন্তর্ভুক্ত Python client ডিফল্টভাবে http://127.0.0.1:8009 ব্যবহার করে, কোনো API key প্রয়োজন হয় না এবং উত্তরের জন্য সর্বোচ্চ 120 সেকেন্ড অপেক্ষা করে।
আপনার প্রথম decision request পাঠান
/v1/systemone endpoint একটি state, questions-এর একটি map এবং ঐচ্ছিক inference control গ্রহণ করে। নিচের request-এ Jeeves-কে একটি customer issue-এর বিভাগ নির্ধারণ করতে, escalation প্রয়োজন কি না সিদ্ধান্ত নিতে এবং customer-এর frustration-এর মাত্রা নির্ধারণ করতে বলা হয়েছে।
curl -s localhost:8009/v1/systemone \
-H 'content-type: application/json' \
-d '{
"state": "Shoes arrived two weeks late and in the wrong size. Also I see two charges on my card.",
"questions": {
"department": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"returns": "Exchanges, refunds, wrong or damaged items",
"shipping": "Delivery status, delays, lost packages",
"billing": "Charges, invoices, payment problems"
}
},
"escalate": {
"type": "noul",
"instructions": "Does this need urgent human attention?"
},
"frustration": {
"type": "score",
"instructions": "How frustrated is the customer?",
"criteria": ["Calm", "Frustrated", "Very angry"]
}
},
"options": {"max_think": 512}
}'
প্রশ্নের ধরন বুঝুন
choice: নামযুক্ত বিকল্পগুলোর মধ্য থেকে নির্বাচন করে এবং নির্বাচিত key, probability ও confidence ফেরত দেয়।noul: হ্যাঁ/না-ধাঁচের সিদ্ধান্ত প্রকাশ করে এবং একটি numericnoulvalue ফেরত দেয়।score: label-এর একটি ক্রমযুক্ত তালিকা মূল্যায়ন করে এবং numeric score, legend, probability ও confidence ফেরত দেয়।
উত্তরে usage information-ও থাকে, যার মধ্যে input, output এবং reasoning token count, পাশাপাশি মোট latency অন্তর্ভুক্ত। একই request-এর প্রশ্নগুলো parallel-এ reasoning করতে পারে।
Python থেকে Jeeves ব্যবহার করুন
অন্তর্ভুক্ত SDK ইনস্টল করুন
pip install ./sdk
Typed question তৈরি করুন
from jeeves_sdk import Choice, Noul, Score, TypeSafeClient
with TypeSafeClient() as client:
result = client.system_one(
state="I was charged twice. Please help.",
questions={
"billing": Noul(
instructions="Is this about billing?"
),
"tone": Choice(
instructions="What is the tone?",
criteria={"calm": None, "angry": None},
),
"urgency": Score(
instructions="How urgent is this?",
criteria=["can wait", "this week", "today"],
),
},
max_think=768,
return_reasoning=True,
)
print(result.nouls["billing"].noul)
print(result.choices["tone"].choice)
print(result.scores["urgency"].score)
print(result.reasoning["tone"].text)
TypeSafeClient প্রত্যাবর্তিত মানগুলোকে প্রশ্নের ধরন অনুযায়ী ভাগ করে। return_reasoning=True সেট করলে প্রতিটি প্রশ্নের যুক্তি প্রদানের লেখাও পাওয়া যায়। README-তে সতর্ক করা হয়েছে যে প্রশিক্ষণের সময় ভাষাগত সামঞ্জস্যের জন্য কোনো পুরস্কার ব্যবহার করা হয়নি, তাই যুক্তির ধাপগুলো সবসময় সহজে ব্যাখ্যা করা নাও যেতে পারে।
অন্য সার্ভারে সংযোগ করুন
ক্লায়েন্টটি ডিফল্টভাবে http://127.0.0.1:8009-এ সংযোগ করে। সার্ভারটি অন্য ঠিকানায় চললে JEEVES_BASE_URL পরিবেশ ভেরিয়েবল সেট করুন।
export JEEVES_BASE_URL=http://your-server:8009
যুক্তি প্রদান ও বিলম্ব নিয়ন্ত্রণ করুন
ঐচ্ছিক options অবজেক্টটি যুক্তি প্রদানের চারটি নিয়ন্ত্রণ প্রকাশ করে। সংশ্লিষ্ট সার্ভার ফ্ল্যাগগুলো সার্ভারজুড়ে ডিফল্ট নির্ধারণ করতে পারে।
think: ডিফল্ট মানtrue। যুক্তির ধাপ তৈরি না করে সরাসরি প্রম্পট থেকে উত্তর দিতেfalseসেট করুন।max_think: ডিফল্ট মান2560। মডেল উত্তর দেওয়ার আগে প্রতিটি যুক্তির ধাপকে নির্দিষ্ট টোকেন সংখ্যায় ছেঁটে দেয়।nothink_threshold: ডিফল্ট মানnull। এটি নির্ধারণ করা হলে, যুক্তি না দেওয়ার আত্মবিশ্বাস থ্রেশহোল্ডে পৌঁছালে বা তা ছাড়ালে Jeeves যুক্তি প্রদান এড়িয়ে যায়।return_reasoning: ডিফল্ট মানfalse। প্রতিক্রিয়ায় যুক্তির লেখা অন্তর্ভুক্ত করতে এটি সক্রিয় করুন।
বিলম্বের প্রোফাইল বেছে নিন
README-র 325-প্রশ্নের ডেভেলপমেন্ট মূল্যায়নে, সম্পূর্ণ যুক্তি প্রদান 0.825 নির্ভুলতা অর্জন করেছে; গড় যুক্তির টোকেন ছিল 1,138 এবং মধ্যম বিলম্ব 3.3 সেকেন্ড। max_think 768 এবং nothink_threshold 0.9 ব্যবহার করলে 0.806 নির্ভুলতা, 344 গড় যুক্তির টোকেন এবং 2.0 সেকেন্ড মধ্যম বিলম্ব পাওয়া গেছে। যুক্তি প্রদান বন্ধ করলে প্রায় 0.3 সেকেন্ডে 0.775 নির্ভুলতা পাওয়া গেছে।
ভারসাম্যপূর্ণ একটি ব্যবহারিক কনফিগারেশন হলো:
{
"options": {
"max_think": 768,
"nothink_threshold": 0.9,
"return_reasoning": false
}
}
সম্পূর্ণ যুক্তি প্রদানে বিলম্বের দীর্ঘ লেজ রয়েছে: প্রতিবেদনে p90 হলো 17.1 সেকেন্ড। প্রতিক্রিয়ার সময় গুরুত্বপূর্ণ হলে ছোট যুক্তির ধাপ বা আত্মবিশ্বাস-ভিত্তিক যুক্তি ব্যবহার করুন।
Jeeves কীভাবে সিদ্ধান্ত নেয়
Jeeves Qwen টোকেনাইজারের বিরল টোকেন ব্যবহার করে state, প্রশ্নের নির্দেশনা এবং উত্তরের বিকল্পগুলোকে নির্দিষ্ট বিন্যাসে সাজায়। এরপর এটি একটি think মার্কার দিয়ে শুরু হওয়া যুক্তির ধাপ তৈরি করে। যুক্তি প্রদানের পর সিদ্ধান্ত মার্কারের আগে প্রশ্ন ও বিকল্পগুলো পুনরায় দেওয়া হয়।
একটি pointer head সিদ্ধান্ত মার্কারে query projection এবং প্রতিটি বিকল্পের সীমানায় key projection-এর মধ্যে scaled dot product গণনা করে। softmax ওই স্কোরগুলোকে সম্ভাবনায় রূপান্তর করে, এবং ডেভেলপমেন্ট সেটে নির্ধারিত একটি temperature সেগুলোকে ক্যালিব্রেট করে। README-র ablation অনুযায়ী, বিশেষ prompt token-এর বদলে সাধারণ label ব্যবহার করা বা যুক্তির পর পুনরাবৃত্ত প্রশ্ন বাদ দেওয়া কর্মদক্ষতা কমিয়েছে।
Diffusion drafter
ঐচ্ছিক drafter speculative decoding-এর মাধ্যমে যুক্তি তৈরির গতি বাড়ায়। এটি Qwen3.5-এর Gated DeltaNet স্তরগুলোর জন্য Orthrus diffusion পদ্ধতিকে মানিয়ে নিয়েছে, যেখানে mask token-গুলো post-convolution key ও value-তে cross-attend করতে পারে।
প্রতিবেদিত হিসাবে, একটি প্রশ্নের জন্য plain graphed greedy decoding-এ গতি প্রতি সেকেন্ডে 109 chain token থেকে block 4-এ প্রতি সেকেন্ডে 176 token-এ বাড়ে। Block 8 প্রতি সেকেন্ডে 193 token-এ পৌঁছায়, তবে একাধিক প্রশ্ন batch করলে কম খরচ বজায় রাখায় block 4-ই ডিফল্ট থাকে। Block 4 ব্যবহার করে আটটি batch করা প্রশ্নে মোট প্রায় প্রতি সেকেন্ডে 960 chain token পাওয়া যায়।
আপনার প্রশিক্ষিত checkpoint পরিবেশন করুন
Jeeves প্রশিক্ষণের সময় LoRA ব্যবহার করে। প্রশিক্ষিত checkpoint পরিবেশনের আগে এটিকে একটি স্বতন্ত্র মডেলে fuse করুন এবং সামঞ্জস্যপূর্ণ drafter ফাইল দিন:
python export.py runs/cispo/final --out runs/fused
python -m inference.serve \
--model runs/fused \
--drafter runs/drafter_k4/drafter.safetensors \
--port 8009
প্রশিক্ষণ pipeline পুনরুৎপাদন করুন
Dataset প্রস্তুত করুন
প্রস্তুতি স্ক্রিপ্টগুলো prep/public.py-তে নির্ধারিত revision থেকে Hugging Face-এর পাবলিক dataset ডাউনলোড করে। প্রতিটি উৎস dataset নিজস্ব লাইসেন্সের অধীনে থাকে।
python -m prep.prep
প্রশিক্ষণ ও মূল্যায়ন চালান
নথিভুক্ত পুনরুৎপাদন pipeline-এ আটটি GPU ব্যবহার করা হয়। এতে supervised fine-tuning, CISPO প্রশিক্ষণ, test ও JevBench মূল্যায়ন, model export, chain generation এবং block-4 drafter প্রশিক্ষণ সম্পন্ন হয়।
torchrun --nproc_per_node 8 train.py sft --run-dir runs/sft
torchrun --nproc_per_node 8 train.py cispo \
--run-dir runs/cispo \
--init runs/sft/final
torchrun --nproc_per_node 8 test.py runs/cispo/final
torchrun --nproc_per_node 8 jevbench.py runs/cispo/final
python export.py runs/cispo/final --out runs/fused
torchrun --nproc_per_node 8 -m drafter.gen --model runs/fused
torchrun --nproc_per_node 8 train.py drafter \
--model runs/fused \
--block 4 \
--run-dir runs/drafter_k4
প্রকাশিত রেসিপিতে প্রথমে 12টি পাবলিক ডেটাসেট এবং সিন্থেটিক পলিসি ডেটার 19,126টি প্রশ্নের ওপর দুটি SFT epoch চালানো হয়। এরপর প্রতি প্রশ্নে আটটি rollout, temperature 1 এবং 2,560-টোকেন reasoning cap সহ CISPO প্রয়োগ করা হয়। পরিকল্পিত 624-step schedule-এর 402তম ধাপে প্রশিক্ষণ থামিয়ে দেওয়া হয়, কারণ পরবর্তী ধাপগুলো saturated reinforcement-learning pool-এ pointer head-কে অতিরিক্ত তীক্ষ্ণ করে তুলেছিল। সবশেষে development set-এ একটি calibration temperature ফিট করা হয়।
উন্নত ব্যবহারের পরামর্শ
- সম্পর্কিত সিদ্ধান্তগুলো ব্যাচ করুন। একটি shared state-এর অধীনে একাধিক প্রশ্ন রাখুন, যাতে সার্ভার তাদের reasoning chain সমান্তরালে প্রক্রিয়া করতে পারে।
- সহজ ক্ষেত্রে সরাসরি উত্তর ব্যবহার করুন।
nothink_thresholdকনফিগার করে reasoning কেবল সেই সিদ্ধান্তগুলোর জন্য সংরক্ষণ করুন, যেগুলোর no-think confidence আপনার নির্ধারিত threshold-এর নিচে। - Latency-sensitive service-এ reasoning সীমিত করুন। গতি ও নির্ভুলতার মধ্যে ভারসাম্য চাইলে reasoning পুরোপুরি বন্ধ না করে
max_thinkকমিয়ে দিন। - নির্বাচিতভাবে reasoning ফেরত দিন। অ্যাপ্লিকেশনের text-এর প্রয়োজন না থাকলে
return_reasoningনিষ্ক্রিয় রাখুন, বিশেষ করে কারণ chain-গুলো সহজে ব্যাখ্যাযোগ্য হবে, এমন নিশ্চয়তা নেই। - নিজের domain-এ মূল্যায়ন করুন। Jeeves প্রকল্পের test split এবং পাবলিক JevBench tier-গুলোতে শক্তিশালী ফল করে, কিন্তু প্রকাশিত MMLU ও MMLU-Pro knowledge evaluation-এ Jev-এর তুলনায় পিছিয়ে থাকে।
- তুলনাগুলো সতর্কতার সঙ্গে ব্যাখ্যা করুন। JevBench-এর বাইরে প্রকাশিত Kev ও Jev তুলনাগুলো একই মূল উৎসের ভিন্ন item ব্যবহার করে।
উপসংহার
Jeeves কাঠামোবদ্ধ Jev-ধাঁচের output-এর সঙ্গে test-time reasoning, calibrated probability এবং দ্রুততর chain generation একত্র করে। প্রকাশিত weight ও Jev-compatible HTTP endpoint দিয়ে শুরু করুন, typed application code-এর জন্য Python SDK ব্যবহার করুন, এবং নির্ভুলতা ও latency-এর ভারসাম্য বজায় রাখতে max_think ও nothink_threshold সমন্বয় করুন। আরও গভীর customization-এর জন্য repository-তে সম্পূর্ণ SFT, CISPO, calibration, export এবং drafter pipeline দেওয়া আছে।
