الأدلة الإرشادية
مرجع التهيئة
كل حقل في oloproof.yaml وrelease.yaml، مع نوعه وقيمته الافتراضية والقيم التي يقبلها ومثال عليه، مأخوذًا من النماذج التي تقرأ الملفين. استخدمه للبحث عن حقل؛ واقرأ صفحتَي البدء السريع والبوابة لتتعلم سير العمل.
يُتحقَّق من الملفين قبل تشغيل أي شيء. فالحقل المجهول، أو الحقل المكتوب خطأً، أو القيمة من نوع خاطئ، خطأ تهيئة ويخرج الأمر بالرمز 2 دون تنفيذ أي حالة. ولكلا الملفين مخطط JSON Schema، يمكن لمحرر يقرأ JSON Schema أن يستخدمه للإكمال التلقائي. وتكتبهما الحزمة المثبّتة، مع مخططات النتائج، في schemas/v1/ تحت المجلد الحالي: python -m oloproof_core.models.schema_export (والاثنان هما project_config.schema.json وrelease_policy.schema.json).
في الجداول أدناه، تعني "مطلوب" أن الملف يُرفض دون الحقل؛ وأي حقل آخر يعرض القيمة المستخدمة حين يُترك.
نظرة سريعة على oloproof.yaml
مشروع صغير كامل. يشغّل دالة Python محليًا، ولا يحتاج إلى شبكة ولا إلى مفاتيح، وهو الشكل الذي ينشئه oloproof init.
# oloproof.yaml
version: 1
project: support-bot
dataset: datasets/support.jsonl
system:
name: support-bot
callable: app.bot:answer
evaluators:
- type: exact_match
criterion: correct_label
field: labelالحقول العليا
| الحقل | النوع | الافتراضي | ما هو |
|---|---|---|---|
| version | 1 | 1 | نسخة تنسيق الملف. لا توجد إلا 1. |
| project | سلسلة نصية | مطلوب | اسم المشروع، يُعرض في التقارير ويُستخدم عند الإرسال. |
| dataset | مسار | مطلوب | ملف مجموعة الاختبار، JSONL، نسبةً إلى المشروع. صفوفه موصوفة في مجموعات الاختبار. |
| system | تعيين | مطلوب | النظام قيد الاختبار. انظر أدناه. |
| concurrency | تعيين | system: 8، judge: 4 | عدد استدعاءات النظام واستدعاءات الحَكَم التي تجري في آن واحد. |
| evaluators | قائمة | مطلوب، واحد على الأقل | ما يُقاس على كل حالة. لكل إدخال type. |
| metrics | قائمة | فارغ | مقاييس إضافية تتجاوز المقياس الذي يمثّله أصلًا كل معيار مُقيِّم. |
| predictive | تعيين | غائب | أين يوجد وسم المُصنِّف ودرجته والحقيقة. انظر النماذج التنبؤية. |
| slices | قائمة سلاسل نصية | فارغ | شرائح استكشافية: metadata.<key>، أو relevant_position، أو context_truncated. ولا تبلغ البوابة أبدًا. انظر الشرائح. |
| min_slice_support | عدد صحيح، 1 على الأقل | 30 | دون هذا العدد من الحالات المؤهَّلة تعرض الشريحة تقديرها دون فترة. |
| replicates | عدد صحيح، 1 على الأقل | 1 | قِس كل حالة هذا العدد من المرات. تبقى الحالة هي الوحدة: تُجمَّع التكرارات داخلها قبل حساب أي فترة. |
| pricing | قائمة | فارغ | ما تدفعه لكل مليون رمز، بحسب النموذج. ومن دونه تُبلَّغ التكلفة بالرموز ولا تُبلَّغ بالدولار أبدًا. |
| egress | قائمة سلاسل نصية | فارغ | أي محتوى خام يجوز لـ oloproof push إرساله إلى مساحة عمل مستضافة. انظر النتائج والتنفيذ. |
concurrency
| الحقل | النوع | الافتراضي |
|---|---|---|
| system | عدد صحيح، 1 على الأقل | 8 |
| judge | عدد صحيح، 1 على الأقل | 4 |
إدخالات pricing
لا يأتي Oloproof بجدول أسعار. يسمّي كل إدخال نموذجًا تمامًا كما يسمّيه model: في المُقيِّم.
| الحقل | النوع | الافتراضي |
|---|---|---|
| model | سلسلة نصية | مطلوب |
| input_per_mtok | رقم، 0 أو أكثر | مطلوب |
| output_per_mtok | رقم، 0 أو أكثر | مطلوب |
# oloproof.yaml
version: 1
project: support-bot
dataset: datasets/support.jsonl
system:
name: support-bot
callable: app.bot:answer
evaluators:
- type: exact_match
criterion: correct_label
field: label
pricing:
- model: my-judge-model
input_per_mtok: 0.15
output_per_mtok: 0.6
egress: [raw_outputs]system
يحتاج النظام إلى واحد بالضبط من callable أو http أو rag.
| الحقل | النوع | الافتراضي | ما هو |
|---|---|---|---|
| name | سلسلة نصية | مطلوب | اسم النظام. جزء من هوية نسخته. |
| version | سلسلة نصية | غائب | تسميتك لهذه النسخة. مطلوب لنظام HTTP. جزء من هويته، فتغييره يُبطل عمليات التنفيذ المخزّنة مؤقتًا. |
| callable | module:attribute | غائب | دالة Python، متزامنة أو غير متزامنة. تتلقى input الحالة وتعيد المُخرَج. |
| http | تعيين | غائب | نقطة نهاية تُستدعى مرة لكل حالة. انظر أدناه. |
| rag | تعيين | غائب | صنف RAG مرحلي مُعلَن بـ @rag_system. انظر أدناه. |
| config | تعيين | فارغ | إعدادات حرة تُسجَّل مع نسخة النظام. وتغييرها يغيّر النسخة. |
| code_paths | قائمة أنماط glob | فارغ | ملفات مصدرية تدخل محتوياتها في نسخة نظام قابل للاستدعاء. ومن دونه لا تُحسب إلا بصمة وحدة الكائن القابل للاستدعاء نفسها. |
| timeout_s | رقم أكبر من 0 | 120 | المهلة لكل استدعاء لنظام قابل للاستدعاء. ونظام HTTP يستخدم http.timeout_s بدلًا منه. |
| records | قائمة أنواع مُخرَجات فنية | فارغ | أنواع المُخرَجات الفنية التي يسجّلها نظام قابل للاستدعاء، مثل retrieval/v1. يُرفض على نظام HTTP أو RAG. |
system.http
| الحقل | النوع | الافتراضي | ما هو |
|---|---|---|---|
| url | سلسلة نصية | مطلوب | أين تُرسَل كل حالة. |
| method | GET أو POST أو PUT | POST | طريقة HTTP. |
| output_path | مسار منقوط | غائب | أي حقل في استجابة JSON هو المُخرَج، مثل result.answer. وغيابه يعني الجسم كله. |
| artifacts | تعيين من النوع إلى مسار منقوط | فارغ | حقول الاستجابة التي تُسجَّل مُخرَجات فنية، مثل retrieval/v1: debug.retrieval. |
| version | سلسلة نصية | غائب | يُستخدم نسخةً للنظام حين يغيب system.version. ويحتاج نظام HTTP إلى أحدهما. |
| timeout_s | رقم أكبر من 0 | 30 | المهلة لكل طلب. |
# oloproof.yaml
version: 1
project: support-api
dataset: datasets/support.jsonl
system:
name: support-api
version: "2026-10-08"
http:
url: http://localhost:8000/answer
output_path: answer
artifacts:
retrieval/v1: debug.retrieval
evaluators:
- type: hit_rate
k: 5عقد الطلب والاستجابة، وما يحدث عند انتهاء المهلة وأخطاء HTTP، موجودان في النتائج والتنفيذ.
system.rag
| الحقل | النوع | الافتراضي | ما هو |
|---|---|---|---|
| object | module:attribute | مطلوب | الصنف المُعلَن بـ @rag_system، أو نسخة منه. |
| depth | عدد صحيح، 1 على الأقل | قيمة الصنف | عدد المقاطع التي يعيدها الاسترجاع. |
| top_k | عدد صحيح، 1 على الأقل | قيمة الصنف | عدد ما يبلغ التوليد منها. |
| token_budget | عدد صحيح، 1 على الأقل | قيمة الصنف | حد للرموز على السياق. يحتاج إلى count_tokens(passage) في الصنف. |
| index_version | سلسلة نصية | قيمة الصنف | جزء من هوية الاسترجاع. غيّره كلما أُعيد بناء الفهرس. |
الإعدادات المعطاة هنا تتجاوز ما يعلنه الصنف. ويسجّل النظام المرحلي مُخرَجاته الفنية retrieval/v1 وcontext/v1 وcitations/v1 بنفسه، لذا يُرفض records بجانبه. انظر RAG.
evaluators
يأخذ كل إدخال type وهذين الحقلين المشتركين:
| الحقل | النوع | الافتراضي | ما هو |
|---|---|---|---|
| criterion | سلسلة نصية | مطلوب ما لم يكن للنوع قيمة افتراضية | اسم ما يُقاس. كل معيار مقياس، ويسمّيه metric: في القاعدة. |
| on_execution_error | missing أو fail | missing | بماذا تُحتسب الحالة التي أخفق استدعاء نظامها لهذا المعيار. يُبقيها missing في المقام غير مرصودة؛ ويحتسبها fail إخفاقًا. |
لا ينطبق fail إلا على مُقيِّمات النجاح/الإخفاق؛ ومُقيِّم الدرجة معه خطأ تهيئة. وon_execution_error حقل في YAML؛ ولا تأخذ أصناف المُقيِّمات في SDK وسيطًا كهذا، وتُحتسب الحالة التي وقع فيها خطأ مفقودة.
أنواع المُقيِّمات
يسرد "يقرأ" ما يعتمد عليه حكم المُقيِّم، وهو أيضًا مفتاح حكمه المخزَّن مؤقتًا. ويسمّي "SDK" الصنف في oloproof.evaluators.
| type في YAML | يقرأ | SDK | يحتاج إلى شبكة أو مفتاح |
|---|---|---|---|
| exact_match | output، expected | ExactMatch | لا |
| contains | output، expected | Contains | لا |
| regex | output | Regex | لا |
| json_schema | output | JsonSchema | لا |
| rubric_judge | input، output، expected | RubricJudge | نعم، مزوِّد نماذج |
| model_classifier | output (أو الحقل الذي يسمّيه text)، واختياريًا premise | YAML فقط | نعم، خادم متوافق مع TEI |
| probability_judge | الحالة والمُخرَج | YAML فقط | نعم، مزوِّد متوافق مع OpenAI يعيد لوغاريتمات الاحتمالات |
| cascade | كمرحلتيه | YAML فقط | نعم |
| hit_rate، recall، mrr، ndcg | artifacts.retrieval، expected | HitRate، Recall، MRR، NDCG | لا |
| citation_validity | artifacts.citations، artifacts.context | CitationValidity | لا |
| groundedness_judge | input، output، artifacts.context | Groundedness | نعم |
| citation_support_judge | input، output، artifacts.context، artifacts.citations | CitationSupport | نعم |
| agent_max_steps | artifacts.agent_trajectory | AgentMaxSteps | لا |
| agent_tool_called | artifacts.agent_trajectory | AgentToolCalled | لا |
| agent_no_tool_loop | artifacts.agent_trajectory | AgentNoToolLoop | لا |
| agent_tool_sequence | artifacts.agent_trajectory، expected | AgentToolSequence | لا |
| agent_no_undeclared_tool | artifacts.agent_trajectory، expected | AgentNoUndeclaredTool | لا |
| agent_constraints_satisfied | artifacts.agent_trajectory | AgentConstraintsSatisfied | لا |
| agent_route | artifacts.agent_trajectory | AgentRoute | لا |
| agent_tool_permissions | artifacts.agent_trajectory | AgentToolPermissions | لا |
| agent_max_handoffs | artifacts.agent_trajectory | AgentMaxHandoffs | لا |
| predictive_correct | حقل الوسم في output وexpected | PredictiveCorrect | لا |
| predictive_recall | كما أعلاه | PredictiveRecall | لا |
| predictive_precision | كما أعلاه | PredictivePrecision | لا |
| predictive_absolute_error | كما أعلاه، رقميًا | AbsoluteError | لا |
| predictive_brier | حقل الدرجة في output، ووسم expected | Brier | لا |
| predictive_log_loss | كما أعلاه | LogLoss | لا |
| predictive_ranking | كما أعلاه | PredictiveRanking | لا |
| لا نوع في YAML | artifacts.conversation | ConversationCompleted (SDK فقط) | لا |
| لا نوع في YAML | expected، artifacts.conversation | ConversationJudge (SDK فقط) | نعم |
| لا نوع في YAML | ما تعلنه أنت | @evaluator وCustomEvaluator (SDK فقط) | بحسب شيفرتك |
الحَكَم الذي يستدعي نموذجًا مستضافًا يرسل محتوى الحالة إلى ذلك المزوِّد ويحاسبه عليه. وتُقرأ المفاتيح من متغير البيئة المسمّى في api_key_env؛ ولا يخزّنها Oloproof في هذه الملفات أبدًا.
المُقيِّمات الحتمية
| النوع | الحقل | النوع | الافتراضي |
|---|---|---|---|
| exact_match | field | مسار منقوط في المُخرَج | غائب: المُخرَج كله |
| exact_match | expected_field | مسار منقوط في expected | غائب: مثل field |
| exact_match | strip | قيمة منطقية | true |
| exact_match | casefold | قيمة منطقية | false |
| contains | field، expected_field | كما في exact_match | غائب |
| regex | pattern | تعبير نمطي | مطلوب |
| regex | field | مسار منقوط | غائب |
| regex | pass_if | match أو no_match | match |
| json_schema | schema | مخطط JSON Schema مضمَّن، أو مسار إلى ملف JSON نسبةً إلى المشروع | مطلوب |
| json_schema | field | مسار منقوط | غائب |
حُكّام النماذج
يشترك rubric_judge وgroundedness_judge وcitation_support_judge في هذه الحقول. ويتطلب rubric_judge واحدًا بالضبط من rubric_file أو rubric_text؛ ويأخذ حَكَما RAG واحدًا على الأكثر ويستخدمان خلاف ذلك معيارًا مدمجًا. وcriterion فيهما افتراضيًا groundedness وcitation_support.
| الحقل | النوع | الافتراضي |
|---|---|---|
| provider | anthropic أو openai أو openai_compatible | مطلوب |
| model | سلسلة نصية | مطلوب |
| rubric_file | مسار | غائب |
| rubric_text | سلسلة نصية | غائب |
| api_key_env | اسم متغير بيئة | ANTHROPIC_API_KEY أو OPENAI_API_KEY |
| base_url | URL | الخاص بالمزوِّد |
| temperature | رقم | 0 |
| max_tokens | عدد صحيح، 1 على الأقل | 512 |
| timeout_s | رقم أكبر من 0 | 60 |
يطرح probability_judge سؤالًا ذا نوع ويقرأ احتمالات النموذج:
| الحقل | النوع | الافتراضي |
|---|---|---|
| provider | openai أو openai_compatible | مطلوب |
| model | سلسلة نصية | مطلوب |
| question | سلسلة نصية | مطلوب |
| form | yes_no أو choice أو score | مطلوب |
| min_probability | رقم في (0, 1] | مطلوب |
| options | تعيين من الإجابة إلى الوصف | لـ choice |
| pass_options | قائمة إجابات | لـ choice |
| levels | تعيين من المستوى إلى الوصف، الأدنى أولًا | لـ score |
| pass_at_least | مستوى | لـ score |
| calibration | slope (أكبر من 0)، intercept، from_version | غائب |
| api_key_env، base_url | كما أعلاه | غائب |
| timeout_s | رقم أكبر من 0 | 60 |
يشغّل cascade حَكَمًا رخيصًا أولًا ويصعّد الحالات غير المؤكدة:
| الحقل | النوع | الافتراضي |
|---|---|---|
| first | إدخال probability_judge | مطلوب |
| then | إدخال rubric_judge أو probability_judge | مطلوب |
| escalate_between | احتمالان | مطلوب |
تحكم المرحلتان على criterion الخاص بالتتالي نفسه؛ والمرحلة التي تسمّي معيارًا مختلفًا تُرفض.
يعطي model_classifier درجة للنص بنموذج مُدرَّب على خادم متوافق مع TEI:
| الحقل | النوع | الافتراضي |
|---|---|---|
| model | سلسلة نصية | مطلوب |
| base_url | URL | مطلوب |
| label | وسم المُصنِّف الذي يُقرأ | مطلوب |
| min_score أو max_score | رقم في [0, 1]، واحد بالضبط | مطلوب |
| text | أي حقل يُصنَّف | output |
| premise | نص ثانٍ، لمُصنِّفات الأزواج | غائب |
| api_key_env | اسم متغير بيئة | غائب |
| timeout_s | رقم أكبر من 0 | 30 |
مُقيِّمات RAG
| النوع | الحقل | النوع | الافتراضي |
|---|---|---|---|
| hit_rate، recall، mrr، ndcg | k | عدد صحيح، 1 على الأقل | 5 لـ hit_rate وrecall، و10 لـ mrr وndcg |
| hit_rate، recall، mrr، ndcg | relevance_unit | doc أو chunk | doc |
| hit_rate، recall، mrr، ndcg | criterion | سلسلة نصية | <type>_at_<k>، مثل hit_rate_at_5 |
| citation_validity | require_citations | قيمة منطقية | false |
| citation_validity | criterion | سلسلة نصية | citations_valid |
مُقيِّمات الوكلاء
| النوع | الحقل | النوع | الافتراضي |
|---|---|---|---|
| agent_max_steps | max_steps | عدد صحيح، 1 على الأقل | مطلوب |
| agent_tool_called | tool_name | سلسلة نصية | مطلوب |
| agent_tool_called | min_calls | عدد صحيح، 1 على الأقل | 1 |
| agent_no_tool_loop | max_repeats | عدد صحيح، 1 على الأقل | 2 |
| agent_tool_sequence | ordered | قيمة منطقية | true |
| agent_constraints_satisfied | constraints | قائمة أسماء قيود | فارغ |
| agent_tool_permissions | permissions | تعيين من الوكيل إلى الأدوات المسموح بها | مطلوب |
| agent_max_handoffs | max_handoffs | عدد صحيح، 0 أو أكثر | مطلوب |
لكل نوع من أنواع الوكلاء criterion افتراضي، لذا يجوز تركه: اسم نوعه نفسه، أو اسم مبني من إعداده (agent_steps_le_8، agent_tool_lookup_called، agent_handoffs_le_2). انظر الوكلاء.
المُقيِّمات التنبؤية
| النوع | الحقل | النوع | الافتراضي |
|---|---|---|---|
| predictive_correct، predictive_recall، predictive_precision | positive | أي قيمة JSON | true، أو قيمة كتلة predictive: |
| كذلك | field | حقل المُخرَج | label، أو predictive.label_field |
| كذلك | expected_field | الحقل المتوقع | label، أو predictive.expected_field |
| predictive_absolute_error | target_range | رقمان | مطلوب |
| predictive_absolute_error | field، expected_field | كما أعلاه | label |
| predictive_brier، predictive_log_loss، predictive_ranking | positive | أي قيمة JSON | true، أو قيمة الكتلة |
| كذلك | field | حقل المُخرَج | score، أو predictive.score_field |
| كذلك | expected_field | الحقل المتوقع | label، أو قيمة الكتلة |
| predictive_log_loss | clip | رقم في (0, 0.5) | مطلوب |
المُقيِّم التنبؤي الذي لا يكتب positive أو field أو expected_field يأخذها من كتلة predictive:؛ والقيمة التي يكتبها تُحفظ.
predictive
| الحقل | النوع | الافتراضي |
|---|---|---|
| label_field | سلسلة نصية | label |
| score_field | سلسلة نصية | score |
| expected_field | سلسلة نصية | label |
| positive | أي قيمة JSON | true |
| calibration_bins | عدد صحيح، 1 على الأقل | 10 |
| thresholds | قائمة أرقام | فارغ |
| average | macro أو micro | غائب: لا تجميع |
metrics
كل معيار مُقيِّم هو مقياس أصلًا. ويضيف إدخال metrics: مقياسًا آخر، يُميَّز بـ type.
| type | الحقول | ما هو |
|---|---|---|
| quantile | id، source، quantile في (0, 1) | مِئين لـ latency_ms أو input_tokens أو output_tokens أو cost_usd أو agent_steps أو agent_tool_calls. |
| ranking | id، criterion، statistic: roc_auc أو average_precision | إحصاء على ترتيب درجات معيار ترتيبي. |
| human_score، human_preference | id | مرفوض: لا توجد بعد طريقة معتمدة تقرأ هذه الوسوم. |
| cost_per_accepted | id، criterion، cost_ceiling_usd، cost_ceiling_source | مرفوض حتى تُعتمد توصيلاته بالتدقيق. |
# oloproof.yaml
version: 1
project: support-bot
dataset: datasets/support.jsonl
system:
name: support-bot
callable: app.bot:answer
evaluators:
- type: exact_match
criterion: correct_label
field: label
metrics:
- id: latency_p95
type: quantile
source: latency_ms
quantile: 0.95release.yaml
سياسة الإصدار: أي القواعد تقرر، وأي القرارات تحجب. الإعدادات المتروكة تحتفظ بقيمها الافتراضية، لذا فالسياسة التي لا تسمّي إلا قواعدها تظل تحجب على FAIL وINSUFFICIENT_EVIDENCE وMANUAL_REVIEW.
# release.yaml
version: 1
rules:
- id: label_accuracy
metric: correct_label
min: 0.8| الحقل | النوع | الافتراضي | ما هو |
|---|---|---|---|
| version | 1 | 1 | نسخة تنسيق الملف. |
| confidence_level | احتمال | 0.95 | مستوى كل فترة تقرؤها قاعدة. |
| block_on | قائمة حالات قرار | FAIL، INSUFFICIENT_EVIDENCE، MANUAL_REVIEW | الحالات التي تجعل البوابة تحجب، وتحدد رمز الخروج. |
| warn_on | قائمة حالات قرار | فارغ | حالات تحذّر دون أن تحجب. يجب ألّا تتداخل مع block_on. |
| block_on_partial_run | قيمة منطقية | true | هل يحجب التشغيل الذي لم يكتمل، برمز الخروج 5. |
| require_validated_evaluators | قيمة منطقية | true | هل تحجب القاعدة المبنية على حَكَم نموذج قرارها حتى يُتحقَّق من الحَكَم مقابل وسوم بشرية. والمُقيِّمات الحتمية مستثناة. |
| minimum_evaluator_agreement | رقم في [0, 1] | غائب | الاتفاق مع الوسوم البشرية الذي يجب أن يبلغه الحَكَم، بحده الأدنى، قبل أن يُتحقَّق منه. |
| maximum_evaluator_bias | رقم في (0, 1] | غائب | إلى أي حد يجوز أن يبتعد معدل نجاح الحَكَم عن معدل الأشخاص قبل أن يُتحقَّق منه. |
| allow_approximate_methods | قيمة منطقية | false | هل يجوز للقاعدة أن تقرر بناءً على فترة يَسِمها المحرك بأنها تقريبية (الفترة الثنائية العنقودية). وإلا فإنها تقرأ MANUAL_REVIEW. |
| min_clusters | عدد صحيح، 10 على الأقل | 20 | بعناقيد أقل من هذا تقرأ القاعدة العنقودية INSUFFICIENT_EVIDENCE. |
| difference_method | bounded_paired_difference@1 أو conditional_exact_paired_difference@1 | غائب: الأولى | أي طريقة معتمدة تحصر فرقًا مزدوجًا بين معدلين ثنائيين. |
| early_stopping | قيمة منطقية | false | شغّل الحالات على دفعات وتوقف حين تُحسم كل قاعدة. انظر البوابة. |
| early_stopping_seed | عدد صحيح، 0 أو أكثر | غائب | بذرة ترتيب الحالات. |
| early_stopping_batch_size | عدد صحيح، 1 على الأقل | 25 | الحالات في كل دفعة. |
| rules | قائمة | مطلوب، واحدة على الأقل | القواعد. انظر أدناه. |
| families | قائمة | فارغ | قواعد تُضبط حالات FAIL الكاذبة فيها معًا. |
| review_rule | تعيين | غائب | مرفوض: لم تُعتمد توصيلاته بعد. |
rules
قائمة واحدة تحمل النوعين. تأخذ قاعدة التشغيل واحدًا بالضبط من min أو max أو max_failures. وتسمّي قاعدة المقارنة kind الخاص بها وتحسم فرقًا بين تشغيلين؛ انظر قواعد المقارنة.
| الحقل | النوع | الافتراضي | ينطبق على |
|---|---|---|---|
| id | سلسلة نصية | مطلوب | الكل |
| metric | معرّف مقياس أو معيار | مطلوب | الكل |
| kind | interval_threshold، observed_count، superiority، non_inferiority، equivalence | يُستنتج لقواعد التشغيل | الكل |
| min | رقم | غائب | قواعد التشغيل: PASS حين لا يقل الحد الأدنى للفترة عن هذا |
| max | رقم | غائب | قواعد التشغيل: PASS حين لا يزيد الحد الأعلى للفترة عن هذا |
| max_failures | عدد صحيح، 0 أو أكثر | غائب | observed_count: عدٌّ على مجموعة الاختبار المنفَّذة، دون فترة |
| margin | رقم أكبر من 0، بوحدات المقياس | غائب | non_inferiority وequivalence؛ يُرفض على superiority |
| direction | min أو max | min | non_inferiority فقط: هل الأعلى أفضل أم الأدنى |
| max_missing_fraction | رقم في [0, 1] | غائب | قواعد الفترة والمقارنة |
| requires_manual_review | قيمة منطقية | false | الكل: تقرأ القاعدة دائمًا MANUAL_REVIEW |
| scope | global أو شريحة | global | قواعد الفترة والمقارنة |
| min_support | عدد صحيح، 1 على الأقل | غائب | قواعد المقارنة على شريحة |
families
| الحقل | النوع | الافتراضي |
|---|---|---|
| id | سلسلة نصية | مطلوب |
| correction | holm | holm |
| rules | قائمة معرّفات قواعد | مطلوب، واحدة على الأقل |
# release.yaml
version: 1
warn_on: [INSUFFICIENT_EVIDENCE]
block_on: [FAIL, MANUAL_REVIEW]
rules:
- id: label_accuracy
metric: correct_label
min: 0.8
max_missing_fraction: 0.05
- id: no_regression
metric: correct_label
kind: non_inferiority
margin: 0.02أنواع المُخرَجات الفنية
المُخرَج الفني سجل ذو نوع يكتبه النظام بجانب مُخرَجه، مثل ما استرجعه. والنوع اسم بحروف صغيرة مع نسخة اختيارية، يطابق ^[a-z][a-z0-9_]*(/v[1-9][0-9]*)?$. والمُقيِّمات التي تحتاج إلى مُخرَج فني تسمّيه، والتشغيل الذي لا يعلن نظامه نوعًا مطلوبًا يُرفض قبل أن يبدأ، بدلًا من احتساب كل حالة مفقودة.
| النوع | يكتبه | يتطلبه |
|---|---|---|
| retrieval/v1 | current_case().retrieval(...)، أو @rag_system، أو http.artifacts | hit_rate، recall، mrr، ndcg |
| context/v1 | current_case().context(...) أو @rag_system | citation_validity، groundedness_judge، citation_support_judge |
| citations/v1 | current_case().citations(...) أو @rag_system | citation_validity، citation_support_judge |
| agent_trajectory/v1 | current_case().agent_trajectory(...) | كل مُقيِّم agent_*، والمصدران agent_steps وagent_tool_calls |
| conversation/v1 | current_case().artifact(CONVERSATION, ...) | ConversationCompleted، ConversationJudge |
| stage_timings/v1 | @rag_system | لا شيء؛ يُعرض بجانب زمن الاستجابة |
يعلن النظام القابل للاستدعاء الأنواع التي يسجّلها في records: (أو @system(records=...))؛ ونظام HTTP في http.artifacts؛ والنظام المرحلي لـ RAG يسجّل أنواعه بنفسه.
النسخ ومفاتيح التخزين المؤقت والإبطال
يعيد Oloproof استخدام العمل الذي لم تتغير مدخلاته، ويحدد معنى "لم يتغير" من بصمات المحتوى. ويحسب المحرك كلًّا منها ويسجّلها مع التشغيل.
| السجل | يُعاد استخدامه حين تتطابق هذه |
|---|---|
| نسخة النظام | name، version، config، وبصمة الشيفرة: مصدر وحدة الكائن القابل للاستدعاء (أو كل ملف يطابقه code_paths)، وurl وmethod وoutput_path وartifacts لنظام HTTP |
| التنفيذ | نسخة النظام، وinput الحالة، وفهرس التكرار. لا يُعاد استخدام إلا عمليات التنفيذ الناجحة. |
| الحكم | نسخة المُقيِّم (نوعه وكل إعداد له) وبصمة كل حقل يقرؤه، كما في جدول المُقيِّمات |
| التحليل | خطة التحليل، والمقياس، ومستوى الثقة، وبصمة مجموعة الاختبار، وكل مُدخَل احتسبه |
| البوابة | كل تحليل، وبصمة السياسة، وهل اكتمل التشغيل، والحالة الفعلية لكل مُقيِّم تستشهد به القرارات |
ما لا يستطيع Oloproof رؤيته عليك أنت أن تعلنه:
- سلوك نظام HTTP موجود على الخادم. غيّر system.version كلما تغيّر ما وراء عنوان URL، وإلا فسيمثّل مُخرَج قديم مخزَّن مؤقتًا النظامَ الجديد.
- لا تُحسب بصمة الوحدات المساعدة للكائن القابل للاستدعاء إلا حين يطابقها code_paths. ومن دونه، لا يغيّر تعديل وحدة مساعدة النسخة.
- يجب أن يعلن التابع أو الكائن القابل للاستدعاء نسخة، ويجب أن تتغير النسخة حين تتغير حالة الكائن.
- يُعرَّف فهرس RAG بـ index_version؛ غيّره حين يُعاد بناء الفهرس.
- هوية حَكَم النموذج هي إعداداته، لا أوزان المزوِّد. وتحديث المزوِّد للنموذج خلف الاسم نفسه لا يكتشفه التخزين المؤقت.
- يحسب @evaluator المخصّص بصمة ملف الوحدة الذي يعرّفه، ولا يُعاد استخدام أحكامه عبر التشغيلات إلا حين يعلن cacheable=True. وحُكّام المعايير المدمجة قابلة للتخزين المؤقت؛ أما المُقيِّمات الحتمية فيُعاد حسابها، وهذا رخيص.
يقيم العمل المخزَّن مؤقتًا في المخزن المحلي للمشروع، .oloproof/store.sqlite بجانب oloproof.yaml (أو تحت OLOPROOF_HOME). وحذف المخزن يتخلص من كل ذاكرة تخزين مؤقت ومن كل تشغيل. وفي مساحة العمل المستضافة لا يعيد المحرك استخدام عمليات التنفيذ أو الأحكام أو التحليلات المخزّنة مؤقتًا، لأن الإرسال يستطيع كتابتها؛ بل يعيد الحساب.