* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
20 KiB
Evaluations (Evals) (اردو)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
مستند ماخذ:
src/lib/evals/،src/lib/db/evals.ts،src/app/api/evals/آخری بار اپ ڈیٹ کیا گیا: 2026-06-28 — v3.8.40
OmniRoute کے ساتھ ایک عمومی جانچ فریم ورک فراہم کیا جاتا ہے، جسے آپ روٹنگ کنفیگریشنز، انفرادی فراہم کنندگان/ماڈلز، یا شامل شدہ "golden set" سویٹس کی کارکردگی جانچنے کے لیے استعمال کر سکتے ہیں۔ اسے روٹنگ کی تبدیلیوں کی تصدیق، نئے فراہم کنندگان کی توثیق، اور پروڈکشن ٹریفک میں منتقل کرنے سے پہلے ریلیزز کو مشروط کرنے کے لیے استعمال کریں۔
فریم ورک کا نفاذ درج ذیل حصوں پر مشتمل ہے:
- ایک خالص رنر (
src/lib/evals/evalRunner.ts) جو اِن میموری بلٹ اِن سویٹس رجسٹر کرتا ہے، متوقع معیار کے مطابق آؤٹ پٹس کا جائزہ لیتا ہے، اور اسکور کارڈز کو یکجا کرتا ہے۔ - SQLite میں حسبِ ضرورت (صارف کی متعین کردہ) سویٹس
اور سابقہ رنز کے لیے ایک پرسسٹنس لیئر (
src/lib/db/evals.ts)۔ - ایک آرکیسٹریشن لیئر (
src/lib/evals/runtime.ts) جو ہر کیس کوPOST /v1/chat/completionsپر حقیقی کالز بھیج کر چلاتی ہے، لیٹنسی اور آؤٹ پٹس محفوظ کرتی ہے، اور رن کو مستقل طور پر محفوظ کرتی ہے۔ /api/evals/*کے تحت REST اینڈ پوائنٹس (صرف مینجمنٹ کی توثیق کے ساتھ)۔Dashboard → Usage → Evalsپر ایک ڈیش بورڈ انٹرفیس (EvalsTab.tsx)۔
تصورات
سویٹ
سویٹ ٹیسٹ کیسز کا ایک نام زد مجموعہ ہے، جس میں ایک description اور ایک یا
زیادہ کیسز ہوتے ہیں۔ سویٹس دو ذرائع سے آتے ہیں:
| ماخذ | کہاں متعین کیا گیا ہے | کیا رن ٹائم پر قابلِ تبدیلی ہے؟ |
|---|---|---|
built-in |
بوٹ کے وقت registerSuite() کے ذریعے رجسٹرڈ |
نہیں (کوڈ میں متعین) |
custom |
SQLite کے eval_suites + eval_cases میں محفوظ |
ہاں (API/UI کے ذریعے) |
موجودہ بلٹ اِن سویٹس (src/lib/evals/evalRunner.ts ملاحظہ کریں):
golden-set— سلام/ریاضی/ترجمہ/حفاظت پر مشتمل 10 بنیادی کیسزcoding-proficiency— Python/JS/SQL/TS/بگ کی شناختreasoning-logic— قیاسی استدلال، لفظی مسائل، پیٹرن کی شناختmultilingual— ترجمہ اور زبان کی شناختsafety-guardrails— PII، جیل بریک، انکار، اور تعصب سے آگاہیinstruction-following— صرف JSON، نمبر وار فہرستیں، زبان کی پابندیاںcodex-comparison— تقابلی موڈ کے لیے براہِ راست مقابلے والے کوڈنگ ٹاسکس
کیس
ہر کیس میں درج ذیل شامل ہوتے ہیں:
| فیلڈ | وضاحت |
|---|---|
id |
مستقل شناخت کنندہ (آؤٹ پٹس اور میٹرکس کے لیے کلید کے طور پر استعمال ہوتا ہے) |
name |
انسان کے لیے قابلِ فہم لیبل |
model |
جب رن suite-default ٹارگٹنگ استعمال کرے تو ڈیفالٹ ماڈل |
input |
{ messages, max_tokens? } — /v1/chat/completions کو بھیجا جاتا ہے |
expected |
{ strategy, value } — اسکورنگ کا معیار (ذیل میں دیکھیں) |
tags |
اختیاری لیبلز (مثلاً safety، pii، jailbreak) |
ہدف
ایک ہی سویٹ کو مختلف اہداف کے مقابل چلایا جا سکتا ہے۔ ہدف کا اسکیما
src/shared/validation/schemas.ts میں evalTargetSchema ہے:
| ہدف کی قسم | id |
طرزِ عمل |
|---|---|---|
suite-default |
null |
ہر کیس اپنا بلٹ اِن model فیلڈ استعمال کرتا ہے |
model |
ماڈل کا نام | ہر کیس کو ایک براہِ راست ماڈل سے لازماً گزاریں (مثلاً gpt-4o) |
combo |
کومبو کا نام | ہر کیس کو ایک کومبو سے چلائیں (روٹنگ انجن کو آزماتا ہے) |
model اور combo کے لیے id فیلڈ لازمی ہے (Zod کے
superRefine کے ذریعے نافذ)۔ جب compareTarget فراہم کیا جائے تو دونوں اہداف کا مختلف ہونا
ضروری ہے — رنر A/B موازنے کے لیے دونوں رنز کو ایک ہی runGroupId کے تحت مستقل طور پر
محفوظ کرتا ہے۔
اسکورنگ کے معیارات
evaluateCase() (evalRunner.ts) میں نافذ کیے گئے ہیں:
| حکمتِ عملی | کامیابی کی شرط… |
|---|---|
exact |
actualOutput === expected.value |
contains |
actualOutput.toLowerCase().includes(expected.value.toLowerCase()) |
regex |
new RegExp(expected.value).test(actualOutput) کی قدر truthy ہو |
custom |
expected.fn(actualOutput, evalCase) کی واپسی truthy ہو (صرف بلٹ اِن) |
نوٹ: کسٹم فنکشن اسکورنگ کوڈ میں متعین (بلٹ اِن) سوٹس کے لیے مخصوص ہے، کیونکہ فنکشنز کو API کے ذریعے سیریلائز نہیں کیا جا سکتا۔ صارف کے بنائے ہوئے سوٹس کے لیے evalCaseBuilderSchema صرف contains | exact | regex قبول کرتا ہے۔
فی الحال کوئی LLM بطور جج یا embedding پر مبنی مماثلت اسکورر موجود نہیں — اسے evaluateCase() میں توسیع کے ایک واضح مقام کے طور پر شامل کیا جا سکتا ہے۔
ڈیٹابیس اسکیما
تین ٹیبلز (مائیگریشنز 030_create_eval_runs.sql اور 031_create_eval_suites.sql):
| ٹیبل | مقصد |
|---|---|
eval_suites |
کسٹم سوٹ میٹا ڈیٹا (id، name، description) |
eval_cases |
ہر سوٹ کے کیسز — input_json، expected_*، tags_json |
eval_runs |
سابقہ رنز — pass_rate، total، passed، failed، avg_latency_ms، summary_json، results_json، outputs_json |
بلٹ اِن سوٹس DB میں محفوظ نہیں کیے جاتے۔ وہ میموری میں موجود رہتے ہیں اور جب بھی evalRunner.ts امپورٹ کیا جاتا ہے، دوبارہ رجسٹر ہوتے ہیں۔
REST API
تمام endpoints کے لیے انتظامی تصدیق (requireManagementAuth) درکار ہے — یہ عوامی پراکسی سطح کا حصہ نہیں ہیں۔
| Endpoint | طریقہ | تفصیل |
|---|---|---|
/api/evals |
GET |
سوٹس + حالیہ رنز + اسکور کارڈ + اہداف + کلیدوں کی فہرست |
/api/evals |
POST |
سوٹ چلائیں (واحد یا موازنہ) — اسکیما evalRunSuiteSchema |
/api/evals/{suiteId} |
GET |
ایک سوٹ حاصل کریں (بلٹ اِن یا کسٹم) |
/api/evals/suites |
POST |
کسٹم سوٹ بنائیں — اسکیما evalSuiteSaveSchema |
/api/evals/suites/{suiteId} |
GET |
کسٹم سوٹ حاصل کریں |
/api/evals/suites/{suiteId} |
PUT |
کسٹم سوٹ تبدیل کریں (کیسز دوبارہ داخل کیے جاتے ہیں) |
/api/evals/suites/{suiteId} |
DELETE |
کسٹم سوٹ اور اس کے کیسز حذف کریں |
سوٹ چلانا
curl -X POST http://localhost:20128/api/evals \
-H "Cookie: auth_token=..." \
-H "Content-Type: application/json" \
-d '{
"suiteId": "golden-set",
"target": { "type": "combo", "id": "my-combo" },
"apiKeyId": "optional-api-key-uuid"
}'
اختیاری فیلڈز:
outputs— پہلے سے کمپیوٹ کیے گئے outputs کاRecord<caseId, string>۔ اسے فراہم کرنے پر runner ڈسپیچ چھوڑ دیتا ہے اور صرف کیش شدہ outputs کو اسکور کرتا ہے (آف لائن جانچ کے لیے مفید)۔compareTarget— متوازی طور پر چلانے کے لیے دوسرا ہدف؛ بالمقابل جائزے کے لیے دونوں رنز ایک ہی تیار کردہrunGroupIdاستعمال کرتے ہیں۔apiKeyId— ڈسپیچ کی گئی/v1/chat/completionsکالز کی تصدیق کے لیے استعمال ہونے والی داخلی API کلید۔ جبREQUIRE_API_KEYفعال ہو تو یہ درکار ہے۔
کسٹم سوٹ بنانا
curl -X POST http://localhost:20128/api/evals/suites \
-H "Cookie: auth_token=..." \
-H "Content-Type: application/json" \
-d '{
"name": "Production smoke",
"description": "Quick sanity check before deploy",
"cases": [
{
"name": "JSON shape",
"model": "gpt-4o",
"input": { "messages": [{ "role": "user", "content": "Reply with {\"ok\": true}" }] },
"expected": { "strategy": "regex", "value": "\"ok\"\\s*:\\s*true" }
}
]
}'
ڈسپیچ پائپ لائن
runEvalSuiteAgainstTarget() (src/lib/evals/runtime.ts):
- سوٹ کو حل کرتا ہے (بلٹ اِن یا حسبِ ضرورت)۔
- ہر کیس کے لیے، کیس کے
messages، حل شدہmodel،stream: false، اورmax_tokens: 512(یا کیس کی جانب سے فراہم کردہ متبادل قدر) کے ساتھ/v1/chat/completionsکے لیے ایکRequestبناتا ہے۔ - چیٹ ہینڈلر کو براہِ راست کال کرتا ہے (اسی پراسیس کے اندر — کوئی اضافی HTTP مرحلہ نہیں)۔
- تاخیر ریکارڈ کرتا ہے اور متن کو یا تو
choices[0].message.contentسے یا Responses-API کےoutput[]پے لوڈ سے اخذ کرتا ہے۔ runSuite()کے ذریعے تمام آؤٹ پٹس کو اسکور کرتا ہے، پھرsaveEvalRun()کے ذریعے محفوظ کرتا ہے۔
کیسز یکے بعد دیگرے چلتے ہیں۔ فی الحال کنکرنسی کا کوئی فلیگ موجود نہیں ہے۔
ڈیش بورڈ
UI، Dashboard → Usage → Evals
(src/app/(dashboard)/dashboard/usage/components/EvalsTab.tsx) پر موجود ہے۔ وہاں سے آپ یہ کر سکتے ہیں:
- بلٹ اِن اور حسبِ ضرورت سوٹس کو ہر کیس کے الگ پیش منظر کے ساتھ براؤز کرنا۔
- کیس بلڈر کے ذریعے حسبِ ضرورت سوٹس بنانا، ان میں ترمیم کرنا، یا انہیں حذف کرنا۔
- کوئی ہدف (سوٹ کی ڈیفالٹ اقدار / ماڈل / کومبو) منتخب کرنا، اختیاری طور پر دوسرا
compareTargetاور API کلید منتخب کرنا، پھر حسبِ ضرورت رَن کرنا۔ - رَن کی تاریخ، ہر کیس کی کامیابی/ناکامی، تاخیر، اور محفوظ کیے گئے آؤٹ پٹس کا معائنہ کرنا۔
- ہر
(suite, target)دائرۂ کار کے تازہ ترین رَن پر مجموعی طور پر مرتب کردہ رولنگ اسکور کارڈ دیکھنا۔
Auto-Assessment RFC کے ساتھ تعلق
ایک الگ اور زیادہ محدود اسیسمنٹ ذیلی نظام src/domain/assessment/ میں موجود ہے
(لائیو اسکورنگ انجن کے لیے AUTO-COMBO.md بھی دیکھیں)۔
یہ ذیلی نظام Auto Combo انجن کو ہدف بناتا ہے — پرووائیڈرز اور ماڈلز کو خودکار طور پر اسکور کرتا ہے تاکہ اپ اسٹریمز کی ناکامی کی صورت میں کومبوز خود اپنی اصلاح کر سکیں۔ یہ اپنا رَنر، اپنا کیٹیگرائزر، اور اپنی اسکورنگ منطق استعمال کرتا ہے۔
یہاں دستاویزی شکل میں بیان کردہ Evals فریم ورک زیادہ وسیع، عمومی مقاصد کے لیے ٹیسٹنگ سطح ہے۔ اسے صوابدیدی ریگریشن سوٹس، A/B موازنوں، اور ہر ریلیز کے اسموک ٹیسٹس کے لیے ترجیح دیں۔ جب آپ چاہتے ہوں کہ پرووائیڈر کی حقیقی وقت کی صحت روٹنگ کے فیصلوں پر اثر انداز ہو، تو Auto-Assessment ذیلی نظام استعمال کریں۔
CI انٹیگریشن
فی الحال کوئی مخصوص eval:ci npm اسکرپٹ موجود نہیں ہے۔ اگر آپ eval نتائج کی بنیاد پر ریلیزز کو مشروط کرنا چاہتے ہیں تو دو راستے ہیں:
- HTTP راستہ: سرور چلائیں، معلوم
suiteId+targetکے ساتھPOST /api/evalsکو درخواست بھیجیں، اور رسپانس میں تصدیق کریں کہruns[].summary.passRate >= Nہے۔ - اِن-پراسیس راستہ: کسی اسکرپٹ سے
@/lib/evals/runtimeمیں موجودrunEvalSuiteAgainstTarget()درآمد کریں، ٹیسٹ DB کے خلاف چلائیں، اور واپس کیے گئےPersistedEvalRun.summaryکو چیک کریں۔
روٹ اور ہسٹری کا احاطہ کرنے والے ٹیسٹس
tests/unit/evals-route.test.ts اور tests/unit/evals-history.test.ts میں موجود ہیں۔
توسیعی مقامات
عام تبدیلیاں اور انہیں کرنے کے مقامات:
- نئی اسکورنگ حکمتِ عملی —
evaluateCase()(evalRunner.ts) میں موجودswitch (evalCase.expected.strategy)بلاک کو وسعت دیں، اورsrc/lib/db/evals.tsمیںEvalCaseStrategyنیزschemas.tsمیںevalCaseBuilderSchemaکو وسیع کریں۔ - نیا بلٹ اِن سوٹ — ایک سوٹ آبجیکٹ متعین کریں اور
evalRunner.tsکے آخر میںregisterSuite()کو کال کریں۔ اسےlistSuites()خودکار طور پر دریافت کر لے گا۔ - کنکرنسی کے ساتھ رَن کرنا —
runEvalSuiteAgainstTarget()میں موجود یکے بعد دیگرے چلنے والےforلوپ کو محدودPromise.allمیں تبدیل کریں (فی الحال کنکرنسی کا کوئی کنٹرول موجود نہیں ہے)۔ - اسٹریم/ٹول-کال کیسز — فی الحال رَنر لازماً
stream: falseاستعمال کرتا ہے۔ اسٹریمنگ یا ٹول سے آگاہ ایویلیوایشن کے لیےruntime.tsمیں تبدیلیاں درکار ہوں گی (اسکورنگ سے پہلے SSE حصوں کو محفوظ اور یکجا کریں)۔
مزید دیکھیں
- USER_GUIDE.md — پروڈکٹ کا مجموعی مرحلہ وار تعارف
- ARCHITECTURE.md — درخواست پائپ لائن کا حوالہ
- AUTO-COMBO.md — آٹو کومبو اسکورنگ انجن (لائیو رن ٹائم)
- ماخذ:
src/lib/evals/,src/lib/db/evals.ts,src/app/api/evals/ - یوزر انٹرفیس:
src/app/(dashboard)/dashboard/usage/components/EvalsTab.tsx