الانتقال إلى المحتوى

الأدلة الإرشادية

مرجع النتائج والتنفيذ

ما يرسله التشغيل إلى نظام HTTP وما يتوقع أن يتلقاه، وكيف تدخل كل حالة في مقام المقياس، وحالات القرار ورموز الأسباب التي تفسّرها، ورموز الخروج، وما البيانات التي تبقى محلية أو تنتقل إلى مساحة عمل مستضافة. للأفكار التي تقف وراءها اقرأ المفاهيم؛ ولحقول السياسة اقرأ مرجع التهيئة.

عقد نظام HTTP

يُستدعى نظام HTTP (system.http في oloproof.yaml) مرة واحدة لكل حالة، ومرة واحدة لكل تكرار.

الجانبالسلوك
الطلبPOST افتراضيًا (يُقبل GET وPUT). والجسم هو قيمة input للحالة بصيغة JSON.
الترويسات والمصادقةلا يمكن تهيئة أي منها. لا يحمل الطلب إلا الإعدادات الافتراضية لعميل HTTP. ونقطة النهاية التي تحتاج إلى مفتاح مكانها خلف نظام Python قابل للاستدعاء يضيفه.
الاستجابةيجب أن تكون JSON. يختار output_path المُخرَج بمسار منقوط، مثل result.answer؛ ومن دونه يكون الجسم كله هو المُخرَج. ويُسجَّل غياب حقل output_path بوصفه خطأ تنفيذ لتلك الحالة.
المُخرَجات الفنيةيقرأ كل إدخال في http.artifacts مسارًا منقوطًا من الاستجابة. وغياب حقل مُعلَن عن استجابة ما خطأ في العقد، ويتوقف التشغيل برمز الخروج 2.
المهلةhttp.timeout_s لكل طلب، 30 ثانية افتراضيًا.
إعادة المحاولةتُعاد محاولة انتهاء المهلة وإخفاقات الاتصال وHTTP 408 و429 و5xx، حتى أربع محاولات إجمالًا، مع تراجع أسّي بتذبذب عشوائي يحترم Retry-After. ولا تُعاد محاولة استجابات 4xx الأخرى.
بعد المحاولة الأخيرةيُسجَّل تنفيذ الحالة بوصفه خطأ وتُحتسب الحالة مفقودة (أو مُخفِقة، في ظل on_execution_error: fail). ويستمر التشغيل.
التزامنعلى الأكثر concurrency.system طلبًا قيد التنفيذ في آن واحد، 8 افتراضيًا.

يدخل عنوان URL والطريقة ومسار المُخرَج وتعيين المُخرَجات الفنية في نسخة النظام، أما ما يفعله الخادم فلا يدخل. غيّر system.version كلما تغيّر سلوك الخادم؛ وانظر مرجع التهيئة لمعرفة السبب.

ثلاث مفردات مختلفة

للنتيجة ثلاثة أنواع من الحالات، ولا ينوب أحدها عن الآخر أبدًا.

النوعالقيميجيب عن
حالة القرارPASS، FAIL، INSUFFICIENT_EVIDENCE، MANUAL_REVIEWما تقوله الأدلة عن قاعدة واحدة.
حالة التنفيذحالة التشغيل RUN_ERROR أو CANCELLED؛ اكتمال التشغيل PARTIAL؛ تنفيذ الحالة ERROR أو TIMEOUTما حدث للتشغيل أو لاستدعاء حالة واحدة. ليست نتيجة جودة.
إجراء الإصدارALLOW، WARN، BLOCKما تفعله سياستك بكل قرار: حالات block_on تحجب، وحالات warn_on تحذّر، والبقية تسمح.

التشغيل الذي ينتهي نهاية طبيعية يكون DECIDED، أو DECIDED_EARLY حين أنهاه الإيقاف المبكر. والتشغيل الذي قاطعه Ctrl-C أو إلغاء المهمة يكون CANCELLED؛ والذي رفعت أداة تشغيله استثناءً يكون RUN_ERROR. وكلاهما يترك التشغيل PARTIAL، ويحتفظ بالحالات التي انتهت، ويتيح للتشغيل التالي إعادة استخدام سجلاتها المخزّنة مؤقتًا. انظر الأخطاء.

بالنسبة إلى عتبة دنيا T وفترة [L, U]، تكون القاعدة PASS حين L >= T، وFAIL حين U < T، وINSUFFICIENT_EVIDENCE فيما عدا ذلك. والعتبة القصوى متناظرة. وقبل قراءة الفترة، تتحقق القاعدة مما إذا كان ينبغي لها أن تقرر أصلًا: أولًا أسباب MANUAL_REVIEW، ثم أسباب INSUFFICIENT_EVIDENCE. وأول مستوى فيه سبب هو الذي يقرر، ويسرد كل سبب وجده.

رموز الأسباب

يحمل كل قرار رمز سبب واحدًا أو أكثر.

MANUAL_REVIEW

الرمزالمعنى
policy_requires_reviewتضبط القاعدة requires_manual_review: true.
unsupported_methodلا توجد فترة معتمدة لهذا المقياس في هذا الوضع. انظر أدناه.
unsupported_dependence_structureتُعلن مجموعة الاختبار عناقيد (group_id) ولا تعالجها أي طريقة معتمدة لهذا المقياس.
approximate_method_not_permittedالفترة الوحيدة تقريبية، والسياسة لا تضبط allow_approximate_methods: true.
evaluator_retiredأُحيل مُقيِّم يستند إليه المقياس إلى التقاعد.

INSUFFICIENT_EVIDENCE

الرمزالمعنى
no_observationsلم تُرصد أي حالة لهذا المقياس.
missingness_exceeds_policyالمفقود من الحالات المؤهَّلة أكثر مما يسمح به max_missing_fraction في القاعدة.
missingness_unboundedتُسقط الطريقة الحالات المفقودة بدلًا من حصرها بحدود، ولا تُعلن القاعدة max_missing_fraction.
evaluator_not_validatedلم يُتحقَّق من حَكَم نموذج يستند إليه المقياس مقابل وسوم بشرية، وrequire_validated_evaluators مفعَّل (الافتراضي).
evaluator_recalibration_requiredتُحقِّق من الحَكَم على نموذج مُقدَّم لم تأتِ منه أحكام هذا التشغيل.
interval_unavailableليس للمقياس فترة تُقرأ.
insufficient_clustersالعناقيد أقل من min_clusters في السياسة.
interval_monte_carlo_uncertainتقع العتبة داخل عدم اليقين الناتج عن المحاكاة لحدٍّ عنقودي.
interval_overlaps_thresholdتحتوي الفترة على العتبة. والمزيد من الحالات يضيّقها.
interval_unboundedليس للفترة حد في الجهة التي تقرؤها القاعدة.
missing_could_change_outcomeقاعدة observed_count: قد تدفع الحالات المفقودة الإخفاقات إلى تجاوز max_failures.
interval_overlaps_zero، interval_overlaps_margin، interval_overlaps_marginsمقارنة تمتد فترة فرقها على جانبي الصفر أو هامش ما.
insufficient_supportقاعدة مقارنة شريحة حالاتها أقل من min_support الخاص بها.
family_correction_withheldقاعدة في إدخال families: أوقف تصحيح Holm قبل بلوغها.

PASS وFAIL

الرمزالحالة
lower_bound_meets_minimum، upper_bound_meets_maximumPASS
upper_bound_below_minimum، lower_bound_above_maximumFAIL
observed_failures_within_limitPASS
observed_failures_exceed_limitFAIL
difference_above_zero، lower_bound_above_margin، interval_within_marginsPASS (مقارنة)
difference_below_zero، upper_bound_below_margin، interval_outside_marginsFAIL (مقارنة)
cost_ceiling_exceededيُذكر بجانب حالة قاعدة تكلفة تجاوز تنفيذٌ مسجَّل سقفَها المُعلَن

مساحة العمل المستضافة فقط

يمكن لمساحة العمل التي تقرر بنفسها بشأن تشغيل مُرسَل إليها أن تحجب القرار بـ ppi_not_verified (لم تتحقق من الفترة التي يستند إليها القرار)، أو execution_not_verified (لم تأتِ المُخرَجات من مُشغِّل مسجَّل)، أو workspace_cannot_decide (لا تحمل نسخة من السياسة، أو تعذّرت عليها قراءة الأدلة). انظر البوابة.

كيف تدخل كل حالة في المقام

يُبلغ كل مقياس عن أربعة أعداد: n_total (الحالات في مجموعة الاختبار)، وn_eligible، وn_observed، وn_missing، مع n_eligible = n_observed + n_missing. وتُسرد الحالات الواقعة خارج n_eligible تحت exclusions مع سبب.

ما حدث للحالةتُحتسبفي المقام
أعاد المُقيِّم نجاحًا أو إخفاقًامرصودة، نجاحًا أو إخفاقًانعم
أعلن المُقيِّم أنه لا ينطبق (مثلًا، لا قيمة متوقعة للمقارنة)مستبعدة، مع السببلا
وقع خطأ في استدعاء النظام أو انتهت مهلتهمفقودة، أو مُخفِقة في ظل on_execution_error: failنعم
رفع المُقيِّم استثناءً، أو تعذّرت قراءة رد الحَكَممفقودةنعم
لم تُشغَّل الحالة قط لأن التشغيل قوطعمفقودة، ويكون التشغيل PARTIALنعم

الحالة المفقودة تُحصَر بحدود ولا تُسقَط. في معدل النجاح يعامل الحد الأدنى للفترة كل حالة مفقودة بوصفها إخفاقًا ويعاملها الحد الأعلى بوصفها نجاحًا، فيكون للتشغيل الذي فيه حالات مفقودة كثيرة فترة واسعة لا تستطيع اجتياز قاعدة صارمة؛ ويستبدل المتوسط المحدود طرفي مداه المُعلَن بالطريقة نفسها. والطريقة التي لا تستطيع حصر الحالات المفقودة (إحصاء ترتيبي، مثلًا) تُسقطها وتسجّل الافتراض، وتقرأ القاعدة المبنية عليها missingness_unbounded حتى تُعلن max_missing_fraction.

تَعُدّ قاعدة observed_count الإخفاقات على مجموعة الاختبار المنفَّذة ولا تقرأ أي فترة. ولا تنجح إلا حين تظل الإخفاقات المرصودة مضافًا إليها كل حالة مفقودة ضمن max_failures.

مقاييس بلا فترة معتمدة

لا تقرر القاعدة إلا بناءً على فترة اعتُمدت طريقتها بالتدقيق. وحيث لا توجد واحدة، يظل المقياس يُحسب ويُعرض، ولا تستعير القاعدة المبنية عليه طريقة غير مُتحقَّق منها:

الوضعما تقرؤه القاعدة المبنية عليه
مقياس درجة (متوسط) بلا مدى مُعلَن، مثل مُقيِّم درجة مخصّص دون score_rangeMANUAL_REVIEW، unsupported_method
مقياس متوسط أو مِئين أو ترتيب أو تكلفة على مجموعة اختبار تُعلن group_idMANUAL_REVIEW، unsupported_dependence_structure
معدل نجاح على مجموعة اختبار عنقوديةفترة تقريبية: MANUAL_REVIEW ما لم يُضبط allow_approximate_methods: true، ثم فحوص العناقيد أعلاه
مقياس مِئين أو ترتيب مع replicates أكبر من 1MANUAL_REVIEW، unsupported_method
أي مقياس على مجموعة اختبار فيها group_id وتكرارات معًاMANUAL_REVIEW، unsupported_dependence_structure
مقارنة على مجموعة اختبار عنقوديةMANUAL_REVIEW
شريحة دون min_slice_supportلا فترة، لكن الشرائح لا تبلغ البوابة أبدًا
مقاييس human_score أو human_preference أو cost_per_acceptedتُرفض عند قراءة الملف، الخروج 2

رموز الخروج

يستخدم oloproof gate، وoloproof run مع سياسة، والأوامر الأخرى التي تقرر، الرموزَ نفسها كلها.

الرمزالمعنى
0لا شيء مما تحجب عليه السياسة: نجحت كل قاعدة، أو أن التي لم تنجح خارج block_on.
1أخفقت قاعدة في block_on.
2كانت التهيئة أو الاستدعاء خاطئًا، أو أخلّ نظام بعقده؛ ولم يُقرَّر شيء.
3قرأت قاعدة في block_on الحالة INSUFFICIENT_EVIDENCE.
4قرأت قاعدة في block_on الحالة MANUAL_REVIEW.
5لم يكتمل التشغيل وblock_on_partial_run مفعَّل (الافتراضي).

حين ينطبق أكثر من رمز، يكون الرمز المُبلَغ عنه أولَ ما ينطبق من 1، 5، 4، 3. والحالة غير المذكورة في block_on لا تستطيع تغيير رمز الخروج: مع block_on: [FAIL] وwarn_on: [INSUFFICIENT_EVIDENCE]، تحذّر القاعدة غير المحسومة وتخرج البوابة بالرمز 0. لذا لا يعني الخروج 0 إلا أنه لم يقع شيء مما تحجب عليه سياستك، لا أن كل قاعدة نجحت. انظر البوابة.

أين يجري العمل وإلى أين تذهب البيانات

محليًا، وهو الافتراضي

يعمل oloproof run وoloproof gate وSDK على جهازك. ويُكتب كل سجل (الحالات، والمُخرَجات، والمُخرَجات الفنية، والأحكام، والمقاييس، والقرارات) في .oloproof/store.sqlite بجانب oloproof.yaml، أو تحت OLOPROOF_HOME حين يُضبط. ولا يُرسَل شيء إلى Oloproof. وحركة الشبكة الوحيدة هي ما تسببه تهيئتك: استدعاءات عنوان URL لنظام HTTP لديك، واستدعاءات يجريها حَكَم نموذج أو مُصنِّف نموذج إلى مزوِّده، الذي يتلقى محتوى الحالات التي يحكم عليها ويحاسبك عليه.

الإرسال إلى مساحة عمل مستضافة

يرسل oloproof push أدلة تشغيل إلى مساحة العمل التي اتصلت بها عبر oloproof login. وهو يرسل افتراضيًا المقاييس والفترات والقرارات والشرائح المجمَّعة، وهوية كل سجل وحالته وتوقيتاته واستهلاكه، لكن لا يرسل محتواه. ويُحجب المحتوى الخام حقلًا حقلًا قبل أن يغادر أي شيء الجهاز، والسجل المحجوب يذكر الفئات التي حُجبت. ولا تُرسَل فئة إلا حين يسردها egress: في oloproof.yaml:

الفئةما تغطيه
raw_inputsمدخلات السيناريو، والقيم المتوقعة، والبيانات الوصفية للحالة: صفوف مجموعة البيانات
raw_outputsما أعاده النظام قيد الاختبار لكل حالة
judge_rationalesالنص الذي كتبه الحَكَم لتفسير حكمه، والذي يقتبس المُخرَج
artifactsسياق الاسترجاع والاستشهادات والمسارات المسجَّلة أثناء التشغيل
error_detailرسائل الاستثناءات وتفاصيلها، التي كثيرًا ما تحمل المُدخَل حرفيًا
system_configالتهيئة المُعلَنة للنظام قيد الاختبار ولمُقيِّماته
label_notesالملاحظة التي كتبها شخص بجانب وسم، والتي كثيرًا ما تقتبس المُخرَج
span_namesأسماء التتبّعات والامتدادات والأدوات والوكلاء التي سجّلتها أداة القياس

لا تُعاد حساب بصمات السجلات بعد الحجب، لذا يظل السجل المستضاف يسمّي الأدلة الأصلية، التي تبقى على جهازك. والحجب ليس تشفيرًا، ويمكن لمقياس على شريحة صغيرة جدًا أن يكشف هوية الحالات التي وراءه.

حين يضع المراجعون وسومًا على الحالات في قائمة المراجعة المستضافة، يجلب متصفحهم محتوى الحالات من oloproof collect العامل على جانبك؛ ولا يمر عبر مساحة العمل. وتُخزَّن مفاتيح المزوِّدين التي تستخدمها مساحة العمل بـ oloproof credentials set، ويعرض oloproof credentials list أسماءها، لا قيمها أبدًا. وتعمل المهمة المُدارة على عامل يشغّله Oloproof، ولا يشغّل شيفرة Python الخاصة بك؛ ويُبلغ oloproof job عن نتيجتها ويخرج وفق بوابتها.

في مساحة العمل المستضافة لا يعيد المحرك أبدًا استخدام عمليات التنفيذ أو الأحكام أو التحليلات المخزّنة مؤقتًا، لأن الإرسال يستطيع الكتابة في ذاكرات التخزين المؤقت تلك؛ بل يعيد حسابها.