নিয়মগুলো প্রকাশ পায়
সংখ্যার আগে।
Telys হলো 0.1.0b4 — এগুলো একটি প্রকাশিত রিগে prototype-validated সংখ্যা, production সংখ্যা নয়। একটি ফলাফল তখনই গণ্য হয় যখন তা একই হার্ডওয়্যারে matched recall-এর অধীনে পরিমাপ করা হয়, raw sample ও সেগুলো তৈরির স্ক্রিপ্টসহ। নিচের নিয়মগুলো প্রতিটি সংখ্যাকে আবদ্ধ করে: আমরা কী পরিমাপ করি, কার বিপরীতে, এবং যেসব ক্ষেত্রে আমাদের হারতেই হবে।
হার্নেস যে নিয়ম প্রয়োগ করে — আমাদের জুড়ে দেওয়া সতর্কতা নয়।
নিচের প্রতিটি নিয়ম বেঞ্চমার্ক হার্নেসে মেশিন চেক হিসেবে এনকোড করা। কোনো রান নিয়ম লঙ্ঘন করলে তাতে ফুটনোট দেওয়া হয় না — সেটি অবৈধ চিহ্নিত হয়ে প্রতিটি স্কোরকার্ড থেকে বাদ পড়ে।
“প্রতিটি গুণক একটি অনুমান — যতক্ষণ না ম্যাচড রিকল ও ম্যাচড হার্ডওয়্যারে পরিমাপ করা হয়, র্যা স্যাম্পল ও একটি রিপ্রোডাকশন স্ক্রিপ্ট প্রকাশসহ।”
Telys বেঞ্চমার্ক নীতিযে বেঞ্চমার্কে হারা সম্ভব নয় তা মূল্যহীন
তৈরি স্কোরকার্ডে একটি বাধ্যতামূলক Where-we-lose বিভাগ থাকে, যা প্রতিটি সেল থেকে স্বয়ংক্রিয়ভাবে পূরণ হয় যেখানে কোনো তুলনাকারী জেতে। সেই বিভাগ খালি থাকলে রিপোর্ট বিল্ড ব্যর্থ হয় — ক্লিন সুইপকে সাফল্য নয়, ভাঙা হার্নেস হিসেবে গণ্য করা হয়।
Embedded বনাম embedded — এটাই ন্যায্য লড়াই
আমরা কখনো TCP-এ উত্তর দেওয়া প্রতিযোগীর বিপরীতে ইন-প্রসেস কলকে হেডলাইন করি না। এমবেডেড লাইব্রেরির বিপরীতে, ইন-প্রসেস বনাম ইন-প্রসেসই সৎ ট্রান্সপোর্ট। সার্ভারের বিপরীতে, ট্রান্সপোর্ট হুবহু মিলিয়ে নেওয়া হয়, নইলে সংখ্যাটি অ্যানোটেট করে হেডলাইন থেকে বাদ রাখা হয়।
ম্যাচড টায়ার, নইলে তুলনা নেই
ইন-মেমরি রানকে কখনো এমন প্রতিযোগীর বিপরীতে স্কোর করা হয় না যে প্রতিটি কমিটে fsync করে। প্রতিটি ফলাফল তার ডিউরেবিলিটি টায়ার ঘোষণা করে — in_mem, wal_async, বা wal_fsync — এবং হার্নেস টায়ার পেরিয়ে যেকোনো তুলনায় হার্ড-ফেল করে।
আমরা FAISS ব্যবহার করে FAISS-কে হারানোর ইঙ্গিত কখনো দিই না
FAISS হলো সেই ANN কোর যা Telys এমবেড করে — একটি ভিত্তি, প্রতিপক্ষ নয়। প্রতিটি ভেক্টর স্কোরকার্ড প্রথমে raw-FAISS ট্রাভার্সাল সেল দেখায়; যেখানে টাই, সেখানে টাই মুদ্রিত হয়। সৎ জয় দাবি করা হয় অন্যত্র: রিরেংক কার্নেল, ফিল্টার্ড প্ল্যানিং, এবং ইন্ডেক্সের চারপাশের ইঞ্জিনে।
প্রতিটি তুলনাকারী একটি দাবি আলাদা করে।
একটি একক লিডারবোর্ড সংখ্যা অ্যালগরিদম, ট্রান্সপোর্ট, ডিউরেবিলিটি ও স্টোরেজ ফরম্যাটকে গুলিয়ে ফেলে। সেটটি এমনভাবে বাছাই করা হয়েছে যাতে প্রতিটি তুলনা ঠিক একটি ভেরিয়েবল আলাদা করে — প্রতিটি হেডলাইনের নিচে একই নোডের কন্ট্রোলসহ।
| সিস্টেম | আকৃতি | তুলনা যা আলাদা করে |
|---|---|---|
| FAISS (একই নোড) | কন্ট্রোল বেসলাইন | মেঝে, প্রতিপক্ষ নয়। Telys FAISS এমবেড করে, তাই raw-FAISS সংখ্যাটিই সেই বেসলাইন যা আমরা; প্রকাশিত ডেল্টা হলো ইঞ্জিন তার চারপাশে যা যোগ করে — একই ইন্ডেক্স স্ট্রিং ও একই পরিমাপকৃত রিকলে। |
| Postgres + pgvector | রিলেশনাল + ভেক্টর | ফিল্টার্ড-হাইব্রিড কোয়েরি: ক্যান্ডিডেট পাথে স্কেলার প্রেডিকেট পুশ করা, ফিল্টার সিলেক্টিভিটি জুড়ে সমান রিকলে, ওভার-ফেচ বা পোস্ট-ফিল্টার করতে বাধ্য ইন্ডেক্সকে হারায় কিনা। |
| LanceDB / Chroma | এমবেডেড লাইব্রেরি | সবচেয়ে কাছের প্রতিযোগী, ইন-প্রসেস বনাম ইন-প্রসেস — যেখানে ইন-প্রসেস সংখ্যা ন্যায্য হেডলাইন। একই ANN ফ্লোর; তুলনা ইঞ্জিনকে আলাদা করে: ইউনিফাইড রো-আইডি স্পেস, কোল্ড-ওপেন, ফুটপ্রিন্ট। |
| Qdrant / Milvus | সার্ভার | অ্যালগরিদম মান — নির্দিষ্ট k-তে রিকল — নেটওয়ার্ক রাউন্ড-ট্রিপ থেকে আলাদা। লেটেন্সি সার্ভার হপ অ্যানোটেটসহ রিপোর্ট করা হয় এবং কখনো ইন-প্রসেস কলের বিপরীতে হেডলাইন করা হয় না। |
| Pinecone | ম্যানেজড সার্ভিস | নির্দিষ্ট k-তে Recall এবং প্রতি কম্পিউট ইউনিটে থ্রুপুট। এমবেডেড ইঞ্জিনের বিপরীতে raw latency-কে হেডলাইন হিসেবে প্রত্যাখ্যান করা হয়েছে; পরিবর্তে same-node control-ই quality claim বহন করে। |
| DuckDB / ClickHouse | বিশ্লেষণ ইঞ্জিন | একই physical Parquet ফাইলে scan ও aggregate করা হয়, যাতে storage-format সুবিধা engine সুবিধা থেকে আলাদা করা যায়। Vectorized analytical engine এখানে উৎকৃষ্ট; তাদের জয় প্রকাশিত হয়। |
যা পরিমাপ করা হয়।
Matrix পরিমাপ নির্ধারণ করে, অনুমানিত জয় নয়। প্রতিটি latency cell open-loop offered load-এর অধীনে সম্পূর্ণ distribution রিপোর্ট করে — শুধু mean নয়। প্রতিটি speed cell harness-এর শিপড ground truth থেকে গণনা করা recall gate-এর সাথে আবদ্ধ; যে cell-এর gate পূরণ হয় না সেটি invalid হিসেবে নির্গত হয় এবং scorecard-এ প্রবেশ করতে পারে না।
| Workload | Setup | যা পরিমাপ করে |
|---|---|---|
| cold-open | Page cache মুছে, নতুন প্রসেস চালু | প্রসেস শুরু থেকে প্রথম সফল query পর্যন্ত সময় — server boot ও recovery-র বিপরীতে segment mmap এবং index-sidecar mapping। Steady state থেকে আলাদাভাবে পরিমাপ করা হয়, কখনো তার মধ্যে মেশানো হয় না। |
| exact FLAT | Brute-force exact search, f32 এবং int8 | নির্মাণগতভাবে recall 1.0-এ distance-kernel floor, একই buffer-এ same-node exact baseline-এর বিপরীতে। প্রতিটি int8 cell f32-এর তুলনায় recall delta রিপোর্ট করে, যাতে quantization loss কখনো লুকানো না থাকে। |
| ফিল্টার্ড হাইব্রিড | Scalar predicate + top-k, তিনটি selectivity জুড়ে swept | Filter সংকুচিত হওয়ার সাথে সাথে সমান recall-এ latency, এবং প্রতি cell-এ planner-এর বেছে নেওয়া কৌশল — pre-filter তারপর exact, pre-filter তারপর IVF, বা search তারপর post-filter — যাতে adaptive সিদ্ধান্ত নিরীক্ষাযোগ্য থাকে। |
| full scan | Full-column scan এবং aggregate | শেয়ার্ড Parquet-এ raw columnar থ্রুপুট, অভিন্ন bytes-এ engine বনাম engine। |
| নির্বাচিত স্ক্যান | কম match rate-এ predicate scan | Footer min-max এবং zone-map pruning আসলে কাজ এড়ায় কিনা — শুধু wall clock নয়, bytes read এবং rows touched হিসেবে রিপোর্ট করা হয়। |
python -m bench.orchestrator.run \
--suite vector --rig m-laptop
# one command: pinned comparators, content-addressed
# datasets, warmup, steady-state measurement
# reviewer mode: the same run with Telys excluded# every run emits a machine-checked ResultEnvelope; # a run that cannot fill every field is invalid index_string = "IVF4096,PQ16" # same for Telys and the FAISS control omp_num_threads = 8 # FAISS threading pinned, disclosed transport = "in_process" # headlined only vs in-process durability_tier = "wal_fsync" # cross-tier comparison hard-fails recall_at_k = 1.000 # harness-measured, never self-reported samples_path = "bench/results/filtered_impact.txt"
প্রতিটি run অন্তত পাঁচবার পুনরাবৃত্তি হয় নতুন প্রসেস শুরুতে, pinned hardware profile-এ, একসময়ে একটি সিস্টেমে। Dataset content-addressed; query set হলো frozen ফাইল, run time-এ তৈরি নয়। Harness specification আজ committed; harness ফলাফলের সাথে প্রকাশিত হয়।
পরিমাপকৃত, শর্তযুক্ত, পুনরুৎপাদনযোগ্য।
প্রতিটি সারি উপরে উল্লিখিত রিগে একটি প্রকৃত রান, তার পাশে মুদ্রিত recall গেটে। জয়ের ক্ষেত্রটি হলো ফিজিক্যাল লেআউট: একই অবিচ্ছিন্ন সাবসেটে আমাদের Mojo স্ক্যান raw FAISS-এর সমকক্ষ — নিচের পার্থক্যটি key-partitioned লেআউট যা এনে দেয়, দ্রুততর distance কার্নেল নয়। এগুলো প্রোটোটাইপ সংখ্যা, হার্নেস পরিণত হওয়ার সাথে সাথে পূর্ণ fairness চুক্তির অধীনে পুনরায় চালানো হবে।
| ওয়ার্কলোড | সেটআপ + recall গেট | পরিমাপকৃত ফলাফল (M4 Max, single-thread, in-process) |
|---|---|---|
| ফিল্টার্ড স্লাইস · 0.1% sel | N=১০,০০,০০০ D=১২৮ K=১০, উষ্ণ, রিকল ১.০০০ (নির্ভুল) | partition-slice p50 0.013 ms — full-scan-এর বিপরীতে লেআউট জয় ~373×, scatter-gather-এর বিপরীতে ~19×। একই সাবসেটে FAISS Flat: 0.040 ms (টাই — প্রমাণ করে জয়টি লেআউটের, কার্নেলের নয়)। |
| ফিল্টার্ড স্লাইস · 0.4% sel | N=১০,০০,০০০ D=১২৮ K=১০, উষ্ণ, রিকল ১.০০০ (নির্ভুল) | p50 0.032 ms — full-scan-এর বিপরীতে ~128×, scatter-gather-এর বিপরীতে ~10.8×। FAISS Flat control 0.035 ms (টাই)। |
| ফিল্টার্ড স্লাইস · 1.6% sel | N=১০,০০,০০০ D=১২৮ K=১০, উষ্ণ, রিকল ১.০০০ (নির্ভুল) | p50 0.112 ms — full-scan-এর বিপরীতে ~42×, scatter-gather-এর বিপরীতে ~10.3×। FAISS Flat control 0.120 ms (টাই)। |
| জায়ান্ট-পার্টিশন রেসকিউ | N=400,000 D=128-এ 247k সারি, nprobe calibrated, recall 0.9915 (floor 0.98) | partition-এর ভেতরে IVF সেখানে লেআউট জয় পুনরুদ্ধার করে যেখানে exact slice দুর্বল হয়: exact slice 1.71 ms → IVF 0.033 ms। IVF ছাড়া একটি একক জায়ান্ট পার্টিশন কেবল ~4–5× ধরে রাখে। |
| নিয়ন্ত্রিত auto-nprobe | N=১০,০০,০০০ D=১২৮ Q=৫০০ nlist=১০০০, রিকল স্থির ০.৯৯৮ (সীমা ০.৯৮) | FIND baseline nprobe=32-এ 0.28–0.31 ms → নিয়ন্ত্রিত auto-nprobe=8-এ 0.081–0.088 ms। Recall floor-এর উপরে থাকে — কোনো নীরব recall-for-speed বিনিময় নেই। |
| FIND বনাম FAISS control | Iso-recall, একই transport, উভয় in-process, N=1,000,000 D=128 | Telys 0.073–0.074 ms @0.998 বনাম raw FAISS 0.080 ms @0.999 — সমতা থেকে সামান্য এগিয়ে। স্কেল-নির্ভর: N=200k-এ পিছিয়ে (0.74×), বড় memory-bound N-এ কেবল ~1.6× পর্যন্ত। FAISS মান, Mojo-ত্বরিত। |
| GIL-মুক্ত concurrency | N=200,000 D=128, ১২টি perf core, in-process Mojo IVF kernel | FIND থ্রুপুট ৮ থ্রেডে ×6.9 স্কেল করে (15,128 → 104,756 qps)। থ্রুপুট স্কেলিং, per-query লেটেন্সি নয়; server engine-এর বিপরীতে তুলনা নয়। |
| Insert-to-recall ফ্রেশনেস | Base N=100,000, M=300 insert, D=128, in-process | একটি সদ্য-inserted ভেক্টর পরবর্তী কোয়েরিতেই top-1: recall@1-of-new = 1.000। Insert p50 0.3 µs। এটি একটি correctness গেট, থ্রুপুট শিরোনাম নয়। |
উপরের প্রতিটি সেল bench/results/-এ একটি নামকৃত স্ক্রিপ্ট ও সংরক্ষিত raw output-এ ট্রেস করে (filtered_impact.txt, partitioned.txt, partition_acceptance.txt, opt.txt, telys.txt, concurrency.txt, freshness.txt)। persistence reopen সংখ্যাটি একটি পুনরায়-পরিমাপকৃত raw sample মুলতুবি থাকায় স্থগিত রাখা হয়েছে। প্রতিটি গুণক তার প্রতিটি সারিতে মুদ্রিত শর্তের বাইরে একটি অনুমান।
কোডের জন্য নির্মিত — এবং কোড বেঞ্চমার্কে স্কোর করা।
Telys কোড রিট্রিভ করে, তাই মানের মাপকাঠি CoIR — সাধারণ টেক্সট suite নয়। LexicalCodeIndex-কে mteb SearchProtocol হিসেবে মোড়ানো হয়েছে এবং bm25s baseline-এর মতো একই path-এ mteb.evaluate দিয়ে স্কোর করা হয়েছে — কোনো পদ্ধতিগত ফাঁক নেই, কোনো self-scoring নেই। Baseline হলো ২০২৬-০৭-২১-এর reproducible রান, প্রকাশিত CoIR-paper-এর সংখ্যা নয় — সেগুলোর অনেকটি পুনরুৎপাদন হয় না। Metric: nDCG@10।
| CoIR task | multigram | bm25-ref | bm25-code | কোড-লেক্সিক্যাল · প্রেরিত | সেরা baseline-এর বিপরীতে |
|---|---|---|---|---|---|
| CodeTransOceanContest | 0.160 | 0.478 | 0.600 | 0.718 | ✅ |
| CodeTransOceanDL | 0.340 | 0.344 | 0.351 | 0.366 | ✅ |
| CosQA | 0.048 | 0.188 | 0.213 | 0.218 | ✅ |
| SyntheticText2SQL | 0.265 | 0.249 | 0.372 | 0.441 | ✅ |
| CodeFeedbackMT | 0.288 | 0.592 | 0.591 | 0.674 | ✅ |
| CodeFeedbackST | 0.162 | 0.682 | 0.682 | 0.722 | ✅ |
| StackOverflowQA | 0.223 | 0.703 | 0.687 | 0.733 | ✅ |
| AppsRetrieval | 0.001 | 0.048 | 0.014 | 0.034 | ❌ |
| গড় | 0.186 | 0.445 † | 0.488 | 7/8 | |
আটটির মধ্যে সাতটিতে জয়; গড় 0.488 বনাম প্রতিটি টাস্কের শক্তিশালী baseline-এর 0.445 († প্রতি টাস্কে bm25-ref / bm25-code-এর সেরাটি) — এবং multigram গড়ের ২.৬ গুণ। একমাত্র পরাজয় AppsRetrieval-এ প্রতিটি lexical পদ্ধতিই শূন্যের কাছাকাছি: দীর্ঘ সমস্যার বিবরণের বিপরীতে কোড খোঁজা embedding-এর এলাকা।
কোড-সচেতন টোকেন + BM25
কোড যেভাবে লেখা হয় সেভাবে identifier ভাগ করা — camelCase, snake_case, dotted path — সাধারণ IDF/BM25-এ প্রবেশ করানো। এটুকুই বেশিরভাগ টাস্কে জয় এনে দেয়: CodeTransOceanContest কোনো tuning ছাড়াই 0.478 থেকে 0.600-এ পৌঁছায়।
Stopword বাদ, হালকা stemming
ইংরেজি stopword বাদ দেওয়া এবং একটি হালকা suffix-stemmer যাতে স্বাভাবিক ভাষার প্রশ্ন কোড টোকেনের সাথে মেলে — এই lever-ই SyntheticText2SQL-কে পরাজয় থেকে 0.441-এ নিয়ে যায়।
k1 = 1.8 · b = 1.0
shipped default, CoIR-এ Algenta-tuned: ভারী term-frequency saturation এবং পূর্ণ length normalization — এই lever-ই StackOverflowQA-কে ঘুরিয়ে দেয়।
প্রতিটি সেল একটি স্ক্রিপ্ট থেকে পুনরুৎপাদন হয় — bench/mteb_code_lexical.py — উভয় পক্ষকে একই mteb.evaluate কলের মধ্য দিয়ে চালিয়ে (রান ২০২৬-০৭-২১)। code-lexical হলো সেই index যা Telys তার shipped default-এ পাঠায়।
জয়, টাই এবং পরাজয় — মুদ্রিত আকারে।
প্রথম সংখ্যা আসার আগেই publication format নির্ধারিত, তাই সংখ্যাগুলো তা বাঁকাতে পারে না।
যেখানে আমরা হারি, মুদ্রিত আকারে
প্রতিটি scorecard-এ একটি Where-we-lose section এবং একটি Where-we-only-match-FAISS section থাকে, উভয়ই cell থেকে স্বয়ংক্রিয়ভাবে পূরণ হয়। কোনোটি খালি থাকলে রিপোর্ট build ব্যর্থ হয়।
আমাদের ছাড়াই ফলাফল পুনরুৎপাদন করুন
Harness Telys বাদ দিয়ে চলে, তাই একজন সংশয়বাদী comparator ও control সংখ্যা একাই পুনরুৎপাদন করতে পারেন এবং নিশ্চিত করতে পারেন যে প্রতিটি competitor তার নিজস্ব গাইড অনুযায়ী tuned ছিল — config committed এবং vendor default-এর বিপরীতে diff করা।
প্রতিটি cell samples-এ ট্রেস করে
প্রতিটি প্রকাশিত cell তার raw per-operation sample এবং সেগুলো তৈরির exact script-এর সাথে লিঙ্কযুক্ত। ফলাফল append-only, engine revision এবং statically linked bundled dependency version-এর সাথে keyed।
এগুলো প্রোটোটাইপ সংখ্যা, প্রতিটি তার শর্তসহ। এই চুক্তির জন্য আমাদের জবাবদিহি করুন — এবং পূর্ণ হার্নেসে পুনরায় চালানোর সময় এই সংখ্যাগুলোর জন্যও।