| { |
| "timestamp": "2026-06-23T17:47:48Z", |
| "target": "https://bayan10-bayan-api.hf.space", |
| "total_vectors": 36, |
| "pass_rate": 83.3, |
| "by_verdict": { |
| "PASS": 30, |
| "FAIL_MODEL": 2, |
| "FAIL_FILTER": 4 |
| }, |
| "by_category": { |
| "offset_shift": { |
| "total": 5, |
| "pass": 5, |
| "fail": 0 |
| }, |
| "prefix_handling": { |
| "total": 10, |
| "pass": 8, |
| "fail": 2 |
| }, |
| "stagelocker": { |
| "total": 6, |
| "pass": 6, |
| "fail": 0 |
| }, |
| "overcorrection": { |
| "total": 10, |
| "pass": 6, |
| "fail": 4 |
| }, |
| "model_mismatch": { |
| "total": 5, |
| "pass": 5, |
| "fail": 0 |
| } |
| }, |
| "offset_issues": [], |
| "filter_issues": [ |
| { |
| "vector_id": "OVR-002", |
| "category": "overcorrection", |
| "subcategory": "correct_grammar_unchanged", |
| "input_text": "المهندسون يعملون في المصنع الكبير بجدٍ واجتهاد", |
| "expected_behavior": "Correct SV agreement + tanween — must not be modified", |
| "grammar_raw_output": "المهندسون يعملون في المصنع الكبير بجد واجتهاد", |
| "grammar_raw_ms": 4220, |
| "punctuation_raw_output": "المهندسون يعملون في المصنع الكبير بجدٍ واجتهاد.", |
| "punctuation_raw_ms": 3964, |
| "pipeline_output": "المهندسون يعملون في المصنع الكبير بجدٍ واجتهاد.", |
| "pipeline_corrected": "المهندسون يعملون في المصنع الكبير بجدٍ واجتهاد.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "واجتهاد.", |
| "end": 46, |
| "id": "2ee09f18-187f-42a4-83bc-e81d696ffa80", |
| "locked": true, |
| "original": "واجتهاد", |
| "priority": 2, |
| "start": 39, |
| "type": "punctuation" |
| } |
| ], |
| "pipeline_ms": 10058, |
| "pipeline_timing": { |
| "grammar_ms": 948, |
| "punctuation_ms": 833, |
| "spelling_ms": 5345, |
| "total_ms": 7132 |
| }, |
| "verdict": "FAIL_FILTER", |
| "root_cause": "Correct text was modified: ['واجتهاد→واجتهاد.']", |
| "failure_detail": "All changes: ['واجتهاد→واجتهاد.']", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OVR-007", |
| "category": "overcorrection", |
| "subcategory": "tanween_preservation", |
| "input_text": "قرأت كتاباً جميلاً عن التاريخ", |
| "expected_behavior": "Tanween (ً) must be preserved — grammar should not strip it", |
| "grammar_raw_output": "قرأت كتابا جميلا عن التاريخ", |
| "grammar_raw_ms": 5403, |
| "punctuation_raw_output": "قرأت كتاباً جميلاً عن التاريخ!", |
| "punctuation_raw_ms": 4864, |
| "pipeline_output": "قرأت كتاباً جميلاً عن التاريخ!", |
| "pipeline_corrected": "قرأت كتاباً جميلاً عن التاريخ!", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "التاريخ!", |
| "end": 29, |
| "id": "a516b100-8451-4611-a618-a3c914e05928", |
| "locked": true, |
| "original": "التاريخ", |
| "priority": 2, |
| "start": 22, |
| "type": "punctuation" |
| } |
| ], |
| "pipeline_ms": 5350, |
| "pipeline_timing": { |
| "grammar_ms": 1185, |
| "punctuation_ms": 730, |
| "spelling_ms": 2609, |
| "total_ms": 4529 |
| }, |
| "verdict": "FAIL_FILTER", |
| "root_cause": "Correct text was modified: ['التاريخ→التاريخ!']", |
| "failure_detail": "All changes: ['التاريخ→التاريخ!']", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OVR-008", |
| "category": "overcorrection", |
| "subcategory": "correct_feminine_form", |
| "input_text": "المعلمة الجديدة شرحت الدرس", |
| "expected_behavior": "Already correct — must NOT change المعلمة to المعلمه", |
| "grammar_raw_output": "المعلمة الجديدة شرحت الدرس", |
| "grammar_raw_ms": 4415, |
| "punctuation_raw_output": "المعلمة الجديدة شرحت الدرس.", |
| "punctuation_raw_ms": 1481, |
| "pipeline_output": "المعلمة الجديدة شرحت الدرس.", |
| "pipeline_corrected": "المعلمة الجديدة شرحت الدرس.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "الدرس.", |
| "end": 26, |
| "id": "31693a38-f540-437b-977b-f541204fa564", |
| "locked": true, |
| "original": "الدرس", |
| "priority": 2, |
| "start": 21, |
| "type": "punctuation" |
| } |
| ], |
| "pipeline_ms": 6679, |
| "pipeline_timing": { |
| "grammar_ms": 852, |
| "punctuation_ms": 643, |
| "spelling_ms": 1817, |
| "total_ms": 3314 |
| }, |
| "verdict": "FAIL_FILTER", |
| "root_cause": "Correct text was modified: ['الدرس→الدرس.']", |
| "failure_detail": "All changes: ['الدرس→الدرس.']", |
| "grammar_raw_changed": false, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OVR-010", |
| "category": "overcorrection", |
| "subcategory": "digits_protection", |
| "input_text": "تأسست الشركة عام 2020 وبلغ عدد موظفيها 150 شخصاً", |
| "expected_behavior": "Digits must NOT be corrupted by grammar model", |
| "grammar_raw_output": "تأسست الشركة عام 2020 وبلغ عدد موظفيها 150 شخصا", |
| "grammar_raw_ms": 4709, |
| "punctuation_raw_output": "تأسست الشركة عام 2020 وبلغ عدد موظفيها 150 شخصاً.", |
| "punctuation_raw_ms": 1835, |
| "pipeline_output": "تأسست الشركة عام يناير وبلغ عدد موظفيها خمسين شخصاً.", |
| "pipeline_corrected": "تأسست الشركة عام يناير وبلغ عدد موظفيها خمسين شخصاً.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "شخصاً.", |
| "end": 48, |
| "id": "3905f603-2a35-4786-a1cd-8d44c1995ba9", |
| "locked": true, |
| "original": "شخصاً", |
| "priority": 2, |
| "start": 43, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [ |
| "يناير", |
| "2020" |
| ], |
| "confidence": 0.6, |
| "correction": "يناير", |
| "end": 21, |
| "id": "99bdcd3f-20bf-4319-be00-cf116e7163a6", |
| "locked": true, |
| "original": "2020", |
| "priority": 1, |
| "start": 17, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "خمسين", |
| "150" |
| ], |
| "confidence": 0.6, |
| "correction": "خمسين", |
| "end": 42, |
| "id": "91023a54-9a4f-415c-83cc-746e12f64dc3", |
| "locked": true, |
| "original": "150", |
| "priority": 1, |
| "start": 39, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 15379, |
| "pipeline_timing": { |
| "grammar_ms": 1106, |
| "punctuation_ms": 905, |
| "spelling_ms": 9998, |
| "total_ms": 12016 |
| }, |
| "verdict": "FAIL_FILTER", |
| "root_cause": "Digits were corrupted", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| } |
| ], |
| "pipeline_issues": [], |
| "model_issues": [ |
| { |
| "vector_id": "PFX-001", |
| "category": "prefix_handling", |
| "subcategory": "wa_prefix", |
| "input_text": "وبالمستشفيات الكبيره يعالجون المرضي", |
| "expected_behavior": "وبالمستشفيات should NOT be split or hallucinated — it's a valid prefixed word", |
| "grammar_raw_output": "وبالمستشفيات الكبيرة يعالج المرضي", |
| "grammar_raw_ms": 2971, |
| "punctuation_raw_output": "وبالمستشفيات الكبيره يعالجون المرضي.", |
| "punctuation_raw_ms": 3292, |
| "pipeline_output": "والمستشفيات الكبيرة تعالج المرضى", |
| "pipeline_corrected": "والمستشفيات الكبيرة تعالج المرضى", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 1.0, |
| "correction": "الكبيرة تعالج المرضى", |
| "end": 35, |
| "id": "864ec032-739e-4cdd-8c0e-ddaba704a15d", |
| "locked": true, |
| "original": "الكبيره يعالجون المرضي", |
| "priority": 3, |
| "start": 13, |
| "type": "grammar" |
| }, |
| { |
| "alternatives": [ |
| "والمستشفيات", |
| "بالمستشفيات", |
| "وبالمستشفيات" |
| ], |
| "confidence": 0.7, |
| "correction": "والمستشفيات", |
| "end": 12, |
| "id": "f22611a6-17ce-49d8-a3e1-fe5f182496f2", |
| "locked": true, |
| "original": "وبالمستشفيات", |
| "priority": 1, |
| "start": 0, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 8651, |
| "pipeline_timing": { |
| "grammar_ms": 900, |
| "punctuation_ms": 670, |
| "spelling_ms": 3928, |
| "total_ms": 5504 |
| }, |
| "verdict": "FAIL_MODEL", |
| "root_cause": "Prefix word was split, hallucinated, or destroyed", |
| "failure_detail": "Input had prefixed words that were corrupted in output", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "PFX-005", |
| "category": "prefix_handling", |
| "subcategory": "fa_prefix", |
| "input_text": "فبالتالي يجب ان نعمل بجد", |
| "expected_behavior": "فبالتالي is valid, should not be split or changed", |
| "grammar_raw_output": "فبالتالي يجب ان نعمل بجد", |
| "grammar_raw_ms": 4139, |
| "punctuation_raw_output": "فبالتالي يجب ان نعمل بجد.", |
| "punctuation_raw_ms": 3775, |
| "pipeline_output": "وبالتالي يجب أن نعمل بجد", |
| "pipeline_corrected": "وبالتالي يجب أن نعمل بجد", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [ |
| "أن", |
| "ال", |
| "من", |
| "ان" |
| ], |
| "confidence": 0.9, |
| "correction": "أن", |
| "end": 15, |
| "id": "6bad78e5-9590-4425-9f0d-a206aa9e494f", |
| "locked": true, |
| "original": "ان", |
| "priority": 1, |
| "start": 13, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "وبالتالي", |
| "فبالتالي" |
| ], |
| "confidence": 0.6, |
| "correction": "وبالتالي", |
| "end": 8, |
| "id": "07473106-3459-4551-8c57-649eb7055f5d", |
| "locked": true, |
| "original": "فبالتالي", |
| "priority": 1, |
| "start": 0, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 8459, |
| "pipeline_timing": { |
| "grammar_ms": 747, |
| "punctuation_ms": 452, |
| "spelling_ms": 4087, |
| "total_ms": 5292 |
| }, |
| "verdict": "FAIL_MODEL", |
| "root_cause": "Prefix word was split, hallucinated, or destroyed", |
| "failure_detail": "Input had prefixed words that were corrupted in output", |
| "grammar_raw_changed": false, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| } |
| ], |
| "results": [ |
| { |
| "vector_id": "OFS-001", |
| "category": "offset_shift", |
| "subcategory": "punct_after_spelling_fix", |
| "input_text": "ذهبت الي المدرسه وقابلت صديقتي وتحدثنا كثيرا", |
| "expected_behavior": "Punct marks should align with corrected text, not shift 1-2 words", |
| "grammar_raw_output": "ذهبت إلى المدرسة وقابلت صديقتي وتحدثنا كثيرا", |
| "grammar_raw_ms": 2192, |
| "punctuation_raw_output": "ذهبت الي المدرسه وقابلت صديقتي وتحدثنا. كثيرا", |
| "punctuation_raw_ms": 4539, |
| "pipeline_output": "ذهبت إلى المدرسة وقابلت صديقتي وتحدثنا كثيرا.", |
| "pipeline_corrected": "ذهبت إلى المدرسة وقابلت صديقتي وتحدثنا كثيرا.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "كثيرا.", |
| "end": 44, |
| "id": "a75e719f-d731-4b6b-a818-c6677d86e805", |
| "locked": true, |
| "original": "كثيرا", |
| "priority": 2, |
| "start": 39, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [ |
| "إلى", |
| "ال", |
| "الم", |
| "الي" |
| ], |
| "confidence": 0.9, |
| "correction": "إلى", |
| "end": 8, |
| "id": "16414133-769e-4d51-97a4-99a08f72cfee", |
| "locked": true, |
| "original": "الي", |
| "priority": 1, |
| "start": 5, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "المدرسة", |
| "المدرسي", |
| "المدرس", |
| "المدرسه" |
| ], |
| "confidence": 0.9, |
| "correction": "المدرسة", |
| "end": 16, |
| "id": "b07eb52f-656d-48de-b10e-fc1ad7ab3ba3", |
| "locked": true, |
| "original": "المدرسه", |
| "priority": 1, |
| "start": 9, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 15129, |
| "pipeline_timing": { |
| "grammar_ms": 1100, |
| "punctuation_ms": 1028, |
| "spelling_ms": 12751, |
| "total_ms": 14915 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Spans aligned correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OFS-002", |
| "category": "offset_shift", |
| "subcategory": "punct_after_multi_word_fix", |
| "input_text": "الطلاب ذهبو الي المكتبه لقراءة الكتب", |
| "expected_behavior": "Punctuation positions should not drift after spelling corrects الي→إلى and المكتبه→المكتبة", |
| "grammar_raw_output": "الطلاب ذهبوا إلى المكتبة لقراءة الكتب", |
| "grammar_raw_ms": 3641, |
| "punctuation_raw_output": "الطلاب ذهبو الي المكتبه لقراءة الكتب.", |
| "punctuation_raw_ms": 5669, |
| "pipeline_output": "الطلاب ذهبوا إلى المكتبة لقراءة الكتب.", |
| "pipeline_corrected": "الطلاب ذهبوا إلى المكتبة لقراءة الكتب.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "الكتب.", |
| "end": 36, |
| "id": "70e059c6-dc53-4d2a-8264-1d30b38dd374", |
| "locked": true, |
| "original": "الكتب", |
| "priority": 2, |
| "start": 31, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [ |
| "إلى", |
| "ال", |
| "الم", |
| "الي" |
| ], |
| "confidence": 0.9, |
| "correction": "إلى", |
| "end": 15, |
| "id": "f3a2de67-9b80-48a5-bfe2-630f4a974d47", |
| "locked": true, |
| "original": "الي", |
| "priority": 1, |
| "start": 12, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "المكتبة", |
| "المكتب", |
| "المشتبه", |
| "المكتبه" |
| ], |
| "confidence": 0.9, |
| "correction": "المكتبة", |
| "end": 23, |
| "id": "21cdcf2c-a116-4ad9-b4a2-408ffdc944d3", |
| "locked": true, |
| "original": "المكتبه", |
| "priority": 1, |
| "start": 16, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "ذهبوا", |
| "ذهب", |
| "ذهبت", |
| "ذهبو" |
| ], |
| "confidence": 0.7, |
| "correction": "ذهبوا", |
| "end": 11, |
| "id": "b6a655e2-0947-424b-8583-18fa28425ed6", |
| "locked": true, |
| "original": "ذهبو", |
| "priority": 1, |
| "start": 7, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 12183, |
| "pipeline_timing": { |
| "grammar_ms": 894, |
| "punctuation_ms": 861, |
| "spelling_ms": 5803, |
| "total_ms": 7565 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Spans aligned correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OFS-003", |
| "category": "offset_shift", |
| "subcategory": "length_changing_fix", |
| "input_text": "انا احب القراءه كثيرا وخصوصا الكتب العلميه", |
| "expected_behavior": "أنا → 3 chars vs انا → 3 chars (same length), but القراءه→القراءة changes char positions", |
| "grammar_raw_output": "أنا أحب القراءة كثيرا وخصوصا الكتب العلمية", |
| "grammar_raw_ms": 5069, |
| "punctuation_raw_output": "انا احب القراءه كثيرا وخصوصا الكتب العلميه.", |
| "punctuation_raw_ms": 3695, |
| "pipeline_output": "أنا أحب القراءة كثيرا وخصوصا الكتب العلمية.", |
| "pipeline_corrected": "أنا أحب القراءة كثيرا وخصوصا الكتب العلمية.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "العلمية.", |
| "end": 42, |
| "id": "d425111e-86bd-408c-a730-abbf9b16d0d3", |
| "locked": true, |
| "original": "العلميه", |
| "priority": 2, |
| "start": 35, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [], |
| "confidence": 1.0, |
| "correction": "القراءة", |
| "end": 15, |
| "id": "1f15dcfb-98ee-4595-b9e4-5ff1ac1798b2", |
| "locked": true, |
| "original": "القراءه", |
| "priority": 1, |
| "start": 8, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "أنا", |
| "الا", |
| "ان", |
| "انا" |
| ], |
| "confidence": 0.9, |
| "correction": "أنا", |
| "end": 3, |
| "id": "024c3155-f0b1-44eb-a893-1323375f3ca8", |
| "locked": true, |
| "original": "انا", |
| "priority": 1, |
| "start": 0, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "أحب", |
| "الب", |
| "احت", |
| "احب" |
| ], |
| "confidence": 0.9, |
| "correction": "أحب", |
| "end": 7, |
| "id": "4617eaa9-d3ac-49d8-a6ed-44fe9399ae6b", |
| "locked": true, |
| "original": "احب", |
| "priority": 1, |
| "start": 4, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 11427, |
| "pipeline_timing": { |
| "grammar_ms": 865, |
| "punctuation_ms": 859, |
| "spelling_ms": 5156, |
| "total_ms": 6892 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Spans aligned correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OFS-004", |
| "category": "offset_shift", |
| "subcategory": "insertion_diffs", |
| "input_text": "كتبت رساله لصديقي واخبرته بالاخبار", |
| "expected_behavior": "When spelling inserts أ (اخبرته→أخبرته), downstream coords must shift +1", |
| "grammar_raw_output": "كتبت رسالة لصديقي وأخبرته بالأخبار", |
| "grammar_raw_ms": 5247, |
| "punctuation_raw_output": "كتبت رساله لصديقي واخبرته بالاخبار.", |
| "punctuation_raw_ms": 4047, |
| "pipeline_output": "كتبت رسالة لصديقي واخبرته بالاخبار.", |
| "pipeline_corrected": "كتبت رسالة لصديقي واخبرته بالاخبار.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "بالاخبار.", |
| "end": 34, |
| "id": "cf599833-50ed-4e29-a29a-e34015bc5c06", |
| "locked": true, |
| "original": "بالاخبار", |
| "priority": 2, |
| "start": 26, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [ |
| "رسالة", |
| "رسالته", |
| "رسالت", |
| "رساله" |
| ], |
| "confidence": 0.9, |
| "correction": "رسالة", |
| "end": 10, |
| "id": "17395e5a-34d1-4900-8dda-d17334fc7232", |
| "locked": true, |
| "original": "رساله", |
| "priority": 1, |
| "start": 5, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 10598, |
| "pipeline_timing": { |
| "grammar_ms": 954, |
| "punctuation_ms": 845, |
| "spelling_ms": 5722, |
| "total_ms": 7525 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Spans aligned correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OFS-005", |
| "category": "offset_shift", |
| "subcategory": "multi_stage_coord_chain", |
| "input_text": "المهندسون ذهبو الي الموقعو وبدأو العمل", |
| "expected_behavior": "3+ fixes in same sentence: verify offset chain doesn't accumulate drift", |
| "grammar_raw_output": "المهندسون ذهبو إلى الموقع وبدأو العمل", |
| "grammar_raw_ms": 4050, |
| "punctuation_raw_output": "المهندسون ذهبو الي الموقعو وبدأو العمل.", |
| "punctuation_raw_ms": 3819, |
| "pipeline_output": "المهندسون ذهبوا إلى الموقع وبدأوا العمل.", |
| "pipeline_corrected": "المهندسون ذهبوا إلى الموقع وبدأوا العمل.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "العمل.", |
| "end": 38, |
| "id": "64709109-bee3-4899-9f03-c1518bea5c98", |
| "locked": true, |
| "original": "العمل", |
| "priority": 2, |
| "start": 33, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [ |
| "إلى", |
| "ال", |
| "الم", |
| "الي" |
| ], |
| "confidence": 0.9, |
| "correction": "إلى", |
| "end": 18, |
| "id": "1ea64620-098c-43f1-b3ee-7697cc122318", |
| "locked": true, |
| "original": "الي", |
| "priority": 1, |
| "start": 15, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "ذهبوا", |
| "ذهب", |
| "ذهبت", |
| "ذهبو" |
| ], |
| "confidence": 0.7, |
| "correction": "ذهبوا", |
| "end": 14, |
| "id": "6f7ea270-b62f-41f1-958d-329c34880996", |
| "locked": true, |
| "original": "ذهبو", |
| "priority": 1, |
| "start": 10, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "الموقع", |
| "الموقعة", |
| "الموقعو" |
| ], |
| "confidence": 0.7, |
| "correction": "الموقع", |
| "end": 26, |
| "id": "7aca1cd0-c410-4dd0-bb2d-f6f862de374b", |
| "locked": true, |
| "original": "الموقعو", |
| "priority": 1, |
| "start": 19, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "وبدأوا", |
| "وبدأ", |
| "وبدأت", |
| "وبدأو" |
| ], |
| "confidence": 0.7, |
| "correction": "وبدأوا", |
| "end": 32, |
| "id": "7b93e1e9-89c4-40a9-ac80-f23d0a938529", |
| "locked": true, |
| "original": "وبدأو", |
| "priority": 1, |
| "start": 27, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 10684, |
| "pipeline_timing": { |
| "grammar_ms": 1091, |
| "punctuation_ms": 953, |
| "spelling_ms": 4027, |
| "total_ms": 6078 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Spans aligned correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "PFX-001", |
| "category": "prefix_handling", |
| "subcategory": "wa_prefix", |
| "input_text": "وبالمستشفيات الكبيره يعالجون المرضي", |
| "expected_behavior": "وبالمستشفيات should NOT be split or hallucinated — it's a valid prefixed word", |
| "grammar_raw_output": "وبالمستشفيات الكبيرة يعالج المرضي", |
| "grammar_raw_ms": 2971, |
| "punctuation_raw_output": "وبالمستشفيات الكبيره يعالجون المرضي.", |
| "punctuation_raw_ms": 3292, |
| "pipeline_output": "والمستشفيات الكبيرة تعالج المرضى", |
| "pipeline_corrected": "والمستشفيات الكبيرة تعالج المرضى", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 1.0, |
| "correction": "الكبيرة تعالج المرضى", |
| "end": 35, |
| "id": "864ec032-739e-4cdd-8c0e-ddaba704a15d", |
| "locked": true, |
| "original": "الكبيره يعالجون المرضي", |
| "priority": 3, |
| "start": 13, |
| "type": "grammar" |
| }, |
| { |
| "alternatives": [ |
| "والمستشفيات", |
| "بالمستشفيات", |
| "وبالمستشفيات" |
| ], |
| "confidence": 0.7, |
| "correction": "والمستشفيات", |
| "end": 12, |
| "id": "f22611a6-17ce-49d8-a3e1-fe5f182496f2", |
| "locked": true, |
| "original": "وبالمستشفيات", |
| "priority": 1, |
| "start": 0, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 8651, |
| "pipeline_timing": { |
| "grammar_ms": 900, |
| "punctuation_ms": 670, |
| "spelling_ms": 3928, |
| "total_ms": 5504 |
| }, |
| "verdict": "FAIL_MODEL", |
| "root_cause": "Prefix word was split, hallucinated, or destroyed", |
| "failure_detail": "Input had prefixed words that were corrupted in output", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "PFX-002", |
| "category": "prefix_handling", |
| "subcategory": "ba_prefix", |
| "input_text": "بالمدرسه الجديده تعلمت كثيرا", |
| "expected_behavior": "بالمدرسه → بالمدرسة (only ه→ة fix, keep ب prefix)", |
| "grammar_raw_output": "بالمدرسة الجديدة تعلمت كثيرا", |
| "grammar_raw_ms": 4857, |
| "punctuation_raw_output": "بالمدرسه الجديده تعلمت كثيرا!", |
| "punctuation_raw_ms": 3498, |
| "pipeline_output": "بالمدرسة الجديدة تعلمت كثيرا!", |
| "pipeline_corrected": "بالمدرسة الجديدة تعلمت كثيرا!", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "كثيرا!", |
| "end": 28, |
| "id": "2ed528c2-3c7d-4e79-a44a-7403baea2498", |
| "locked": true, |
| "original": "كثيرا", |
| "priority": 2, |
| "start": 23, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [ |
| "بالمدرسة", |
| "بالمدرسه" |
| ], |
| "confidence": 0.9, |
| "correction": "بالمدرسة", |
| "end": 8, |
| "id": "eb76dee8-b0a1-4229-a8c8-396b00503632", |
| "locked": true, |
| "original": "بالمدرسه", |
| "priority": 1, |
| "start": 0, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "الجديدة", |
| "الجديد", |
| "الجديده" |
| ], |
| "confidence": 0.9, |
| "correction": "الجديدة", |
| "end": 16, |
| "id": "d0406447-2aab-40a8-8e67-f1be08eb147c", |
| "locked": true, |
| "original": "الجديده", |
| "priority": 1, |
| "start": 9, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 6854, |
| "pipeline_timing": { |
| "grammar_ms": 683, |
| "punctuation_ms": 695, |
| "spelling_ms": 2462, |
| "total_ms": 3844 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Prefixed words handled correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "PFX-003", |
| "category": "prefix_handling", |
| "subcategory": "li_prefix", |
| "input_text": "للطالبات المجتهدات جوائز قيمه", |
| "expected_behavior": "للطالبات should be preserved intact", |
| "grammar_raw_output": "للطالبات المجتهدات جوائز قيمة", |
| "grammar_raw_ms": 3639, |
| "punctuation_raw_output": "للطالبات المجتهدات جوائز قيمه.", |
| "punctuation_raw_ms": 4755, |
| "pipeline_output": "للطالبات المجتهدات جوائز قيمة.", |
| "pipeline_corrected": "للطالبات المجتهدات جوائز قيمة.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "قيمة.", |
| "end": 29, |
| "id": "775e81e6-24fb-4e63-87e5-e24b05a6667d", |
| "locked": true, |
| "original": "قيمه", |
| "priority": 2, |
| "start": 25, |
| "type": "punctuation" |
| } |
| ], |
| "pipeline_ms": 7291, |
| "pipeline_timing": { |
| "grammar_ms": 695, |
| "punctuation_ms": 703, |
| "spelling_ms": 3010, |
| "total_ms": 4412 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Prefixed words handled correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "PFX-004", |
| "category": "prefix_handling", |
| "subcategory": "ka_prefix", |
| "input_text": "كالعاده ذهبت الي العمل", |
| "expected_behavior": "كالعادة — ه→ة fix should work through ك+ال prefix", |
| "grammar_raw_output": "كالعادة ذهبت إلى العمل", |
| "grammar_raw_ms": 3487, |
| "punctuation_raw_output": "كالعاده ذهبت الي. العمل", |
| "punctuation_raw_ms": 3577, |
| "pipeline_output": "كالعادة ذهبت إلى العمل.", |
| "pipeline_corrected": "كالعادة ذهبت إلى العمل.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "العمل.", |
| "end": 22, |
| "id": "2dec32ad-860f-4839-93d9-fe92a7089654", |
| "locked": true, |
| "original": "العمل", |
| "priority": 2, |
| "start": 17, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [ |
| "كالعادة", |
| "كالعاده" |
| ], |
| "confidence": 0.9, |
| "correction": "كالعادة", |
| "end": 7, |
| "id": "fb09c4e9-3766-4db1-b859-43ceb3c8d25c", |
| "locked": true, |
| "original": "كالعاده", |
| "priority": 1, |
| "start": 0, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "إلى", |
| "ال", |
| "الم", |
| "الي" |
| ], |
| "confidence": 0.9, |
| "correction": "إلى", |
| "end": 16, |
| "id": "4969eaee-2579-4a12-a8e0-eb87c6996647", |
| "locked": true, |
| "original": "الي", |
| "priority": 1, |
| "start": 13, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 7188, |
| "pipeline_timing": { |
| "grammar_ms": 646, |
| "punctuation_ms": 529, |
| "spelling_ms": 2683, |
| "total_ms": 3863 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Prefixed words handled correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "PFX-005", |
| "category": "prefix_handling", |
| "subcategory": "fa_prefix", |
| "input_text": "فبالتالي يجب ان نعمل بجد", |
| "expected_behavior": "فبالتالي is valid, should not be split or changed", |
| "grammar_raw_output": "فبالتالي يجب ان نعمل بجد", |
| "grammar_raw_ms": 4139, |
| "punctuation_raw_output": "فبالتالي يجب ان نعمل بجد.", |
| "punctuation_raw_ms": 3775, |
| "pipeline_output": "وبالتالي يجب أن نعمل بجد", |
| "pipeline_corrected": "وبالتالي يجب أن نعمل بجد", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [ |
| "أن", |
| "ال", |
| "من", |
| "ان" |
| ], |
| "confidence": 0.9, |
| "correction": "أن", |
| "end": 15, |
| "id": "6bad78e5-9590-4425-9f0d-a206aa9e494f", |
| "locked": true, |
| "original": "ان", |
| "priority": 1, |
| "start": 13, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "وبالتالي", |
| "فبالتالي" |
| ], |
| "confidence": 0.6, |
| "correction": "وبالتالي", |
| "end": 8, |
| "id": "07473106-3459-4551-8c57-649eb7055f5d", |
| "locked": true, |
| "original": "فبالتالي", |
| "priority": 1, |
| "start": 0, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 8459, |
| "pipeline_timing": { |
| "grammar_ms": 747, |
| "punctuation_ms": 452, |
| "spelling_ms": 4087, |
| "total_ms": 5292 |
| }, |
| "verdict": "FAIL_MODEL", |
| "root_cause": "Prefix word was split, hallucinated, or destroyed", |
| "failure_detail": "Input had prefixed words that were corrupted in output", |
| "grammar_raw_changed": false, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "PFX-006", |
| "category": "prefix_handling", |
| "subcategory": "complex_prefix_chain", |
| "input_text": "وبالاضافه الي ذلك فان المشكله كبيره", |
| "expected_behavior": "وبالإضافة إلى — hamza fix through وب prefix, plus ه→ة fixes", |
| "grammar_raw_output": "بالإضافة إلى ذلك فإن المشكلة كبيرة", |
| "grammar_raw_ms": 5673, |
| "punctuation_raw_output": "وبالاضافه الي ذلك فان المشكله كبيره", |
| "punctuation_raw_ms": 5848, |
| "pipeline_output": "وبالاضافة إلى ذلك فأن المشكلة كبيرة", |
| "pipeline_corrected": "وبالاضافة إلى ذلك فأن المشكلة كبيرة", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [ |
| "وبالاضافة", |
| "وبالاضافه" |
| ], |
| "confidence": 0.9, |
| "correction": "وبالاضافة", |
| "end": 9, |
| "id": "0e73b0d4-951b-4080-8ad0-0a676b744ff6", |
| "locked": true, |
| "original": "وبالاضافه", |
| "priority": 1, |
| "start": 0, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "إلى", |
| "ال", |
| "الم", |
| "الي" |
| ], |
| "confidence": 0.9, |
| "correction": "إلى", |
| "end": 13, |
| "id": "fc987f49-e21f-47e8-9982-da87eaba7719", |
| "locked": true, |
| "original": "الي", |
| "priority": 1, |
| "start": 10, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "فأن", |
| "ان", |
| "كان", |
| "فان" |
| ], |
| "confidence": 0.9, |
| "correction": "فأن", |
| "end": 21, |
| "id": "ef5eb7fb-d623-4a3c-aa72-22785ca8d920", |
| "locked": true, |
| "original": "فان", |
| "priority": 1, |
| "start": 18, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "المشكلة", |
| "المشكل", |
| "المشكله" |
| ], |
| "confidence": 0.9, |
| "correction": "المشكلة", |
| "end": 29, |
| "id": "a2c44be1-a574-422a-8a08-253daa04072b", |
| "locked": true, |
| "original": "المشكله", |
| "priority": 1, |
| "start": 22, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "كبيرة", |
| "كبير", |
| "كبيرا", |
| "كبيره" |
| ], |
| "confidence": 0.9, |
| "correction": "كبيرة", |
| "end": 35, |
| "id": "6d53838b-635c-41a8-933f-5de600b28494", |
| "locked": true, |
| "original": "كبيره", |
| "priority": 1, |
| "start": 30, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 8512, |
| "pipeline_timing": { |
| "grammar_ms": 795, |
| "punctuation_ms": 664, |
| "spelling_ms": 4027, |
| "total_ms": 5496 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Prefixed words handled correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "PFX-007", |
| "category": "prefix_handling", |
| "subcategory": "wa_attached_to_error", |
| "input_text": "والمهندسين بنو المبني بسرعه", |
| "expected_behavior": "والمهندسين should stay, بنو→بنوا (grammar), المبني→المبنى, بسرعه→بسرعة", |
| "grammar_raw_output": "والمهندسين بنو المبنى بسرعة", |
| "grammar_raw_ms": 3892, |
| "punctuation_raw_output": "والمهندسين بنو المبني بسرعه", |
| "punctuation_raw_ms": 5865, |
| "pipeline_output": "والمهندسين بنو المبنى بسرعة", |
| "pipeline_corrected": "والمهندسين بنو المبنى بسرعة", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 1.0, |
| "correction": "المبنى", |
| "end": 21, |
| "id": "9525df7d-619d-4b89-9eef-52e2cfa11c27", |
| "locked": true, |
| "original": "المبني", |
| "priority": 1, |
| "start": 15, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "بسرعة", |
| "بسرعه" |
| ], |
| "confidence": 0.9, |
| "correction": "بسرعة", |
| "end": 27, |
| "id": "07f7347d-07ae-42fb-9bd3-7366b4df58e4", |
| "locked": true, |
| "original": "بسرعه", |
| "priority": 1, |
| "start": 22, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 7327, |
| "pipeline_timing": { |
| "grammar_ms": 741, |
| "punctuation_ms": 720, |
| "spelling_ms": 2257, |
| "total_ms": 3723 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Prefixed words handled correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": true, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "PFX-008", |
| "category": "prefix_handling", |
| "subcategory": "attached_pronoun", |
| "input_text": "كتابه قديم وصفحاته ممزقه", |
| "expected_behavior": "كتابه (his book) — ه is pronoun, NOT ta marbuta. Must NOT become كتابة", |
| "grammar_raw_output": "كتابه قديم وصفحاته ممزقه", |
| "grammar_raw_ms": 3990, |
| "punctuation_raw_output": "كتابه قديم وصفحاته ممزقه.", |
| "punctuation_raw_ms": 4414, |
| "pipeline_output": "كتابه قديم وصفحاته ممزقة.", |
| "pipeline_corrected": "كتابه قديم وصفحاته ممزقة.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "ممزقة.", |
| "end": 24, |
| "id": "e043a926-dd17-4d48-a5c9-629f3e23c421", |
| "locked": true, |
| "original": "ممزقه", |
| "priority": 2, |
| "start": 19, |
| "type": "punctuation" |
| } |
| ], |
| "pipeline_ms": 8659, |
| "pipeline_timing": { |
| "grammar_ms": 898, |
| "punctuation_ms": 569, |
| "spelling_ms": 2573, |
| "total_ms": 4043 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Prefixed words handled correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": false, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "PFX-009", |
| "category": "prefix_handling", |
| "subcategory": "pronoun_vs_tamarbuta", |
| "input_text": "قرأته بعنايه فتأملته جيدا", |
| "expected_behavior": "قرأته and فتأملته — ته is pronoun suffix, NOT ta marbuta", |
| "grammar_raw_output": "قرأته بعناية فتأملته جيدا", |
| "grammar_raw_ms": 5216, |
| "punctuation_raw_output": "قرأته بعنايه فتأملته جيدا.", |
| "punctuation_raw_ms": 4752, |
| "pipeline_output": "قرأته بعناية فتأملته جيدا", |
| "pipeline_corrected": "قرأته بعناية فتأملته جيدا", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [ |
| "بعناية", |
| "بعنايه" |
| ], |
| "confidence": 0.9, |
| "correction": "بعناية", |
| "end": 12, |
| "id": "e54cb82b-c7c6-46da-af00-c32a1e6e0ec0", |
| "locked": true, |
| "original": "بعنايه", |
| "priority": 1, |
| "start": 6, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 9512, |
| "pipeline_timing": { |
| "grammar_ms": 886, |
| "punctuation_ms": 680, |
| "spelling_ms": 4227, |
| "total_ms": 5796 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Prefixed words handled correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": true, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "PFX-010", |
| "category": "prefix_handling", |
| "subcategory": "merged_preposition", |
| "input_text": "ذهبتللمدرسه صباحا", |
| "expected_behavior": "Missing space: ذهبت+ل+المدرسه — should split and fix", |
| "grammar_raw_output": "ذهبت للمدرسة صباحا", |
| "grammar_raw_ms": 4748, |
| "punctuation_raw_output": "ذهبتللمدرسه صباحا.", |
| "punctuation_raw_ms": 4569, |
| "pipeline_output": "ذهبتللمدرسة صباحا", |
| "pipeline_corrected": "ذهبتللمدرسة صباحا", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [ |
| "ذهبتللمدرسة", |
| "ذهبتللمدرسه" |
| ], |
| "confidence": 0.9, |
| "correction": "ذهبتللمدرسة", |
| "end": 11, |
| "id": "89bbf955-1553-406d-be97-c419f91dd608", |
| "locked": true, |
| "original": "ذهبتللمدرسه", |
| "priority": 1, |
| "start": 0, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 7768, |
| "pipeline_timing": { |
| "grammar_ms": 737, |
| "punctuation_ms": 473, |
| "spelling_ms": 3234, |
| "total_ms": 4448 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Prefixed words handled correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "SLK-001", |
| "category": "stagelocker", |
| "subcategory": "spelling_lock_grammar_override", |
| "input_text": "السياره جميل جدا", |
| "expected_behavior": "Spelling fixes السياره→السيارة, Grammar should still fix جميل→جميلة (Phase 11 hierarchical)", |
| "grammar_raw_output": "السيارة جميلة جدا", |
| "grammar_raw_ms": 4482, |
| "punctuation_raw_output": "السياره جميل جدا.", |
| "punctuation_raw_ms": 4206, |
| "pipeline_output": "السيارة جميلة جدا.", |
| "pipeline_corrected": "السيارة جميلة جدا.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 1.0, |
| "correction": "جميلة", |
| "end": 12, |
| "id": "577256fe-dbe7-48dd-b5de-0eb174522356", |
| "locked": true, |
| "original": "جميل", |
| "priority": 3, |
| "start": 8, |
| "type": "grammar" |
| }, |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "جدا.", |
| "end": 16, |
| "id": "f3f98848-5d81-4253-920c-5c8637f41976", |
| "locked": true, |
| "original": "جدا", |
| "priority": 2, |
| "start": 13, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [ |
| "السيارة", |
| "السياره" |
| ], |
| "confidence": 0.9, |
| "correction": "السيارة", |
| "end": 7, |
| "id": "64185d2f-cb8c-4fae-85b1-d8da8217ec7a", |
| "locked": true, |
| "original": "السياره", |
| "priority": 1, |
| "start": 0, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 7050, |
| "pipeline_timing": { |
| "grammar_ms": 534, |
| "punctuation_ms": 397, |
| "spelling_ms": 2028, |
| "total_ms": 2964 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Grammar successfully overrode spelling lock", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "SLK-002", |
| "category": "stagelocker", |
| "subcategory": "grammar_not_overwrite_spelling", |
| "input_text": "المدرسه كبير وجميل", |
| "expected_behavior": "Spelling: المدرسه→المدرسة. Grammar should NOT revert to المدرسه. Should add ة to كبير/جميل", |
| "grammar_raw_output": "المدرسة كبيرة وجميلة", |
| "grammar_raw_ms": 3443, |
| "punctuation_raw_output": "المدرسه كبير وجميل.", |
| "punctuation_raw_ms": 2430, |
| "pipeline_output": "المدرسة كبيرة وجميلة", |
| "pipeline_corrected": "المدرسة كبيرة وجميلة", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 1.0, |
| "correction": "كبيرة وجميلة", |
| "end": 18, |
| "id": "992518de-2c09-4969-b6a1-6b04791b8f62", |
| "locked": true, |
| "original": "كبير وجميل", |
| "priority": 3, |
| "start": 8, |
| "type": "grammar" |
| }, |
| { |
| "alternatives": [ |
| "المدرسة", |
| "المدرسي", |
| "المدرس", |
| "المدرسه" |
| ], |
| "confidence": 0.9, |
| "correction": "المدرسة", |
| "end": 7, |
| "id": "8eedd2a1-d3fb-4709-80c0-36a959b440c2", |
| "locked": true, |
| "original": "المدرسه", |
| "priority": 1, |
| "start": 0, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 6426, |
| "pipeline_timing": { |
| "grammar_ms": 597, |
| "punctuation_ms": 546, |
| "spelling_ms": 2681, |
| "total_ms": 3828 |
| }, |
| "verdict": "PASS", |
| "root_cause": "StageLocker operating correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": true, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "SLK-003", |
| "category": "stagelocker", |
| "subcategory": "punct_respects_grammar_lock", |
| "input_text": "الطلاب ذهبوا الى المكتبة لقراءة الكتب الجديدة", |
| "expected_behavior": "Grammar unchanged (correct text). Punctuation should NOT move/corrupt words", |
| "grammar_raw_output": "الطلاب ذهبوا الى المكتبة لقراءة الكتب الجديدة", |
| "grammar_raw_ms": 3155, |
| "punctuation_raw_output": "الطلاب ذهبوا الى المكتبة لقراءة الكتب الجديدة!", |
| "punctuation_raw_ms": 3522, |
| "pipeline_output": "الطلاب ذهبوا إلى المكتبة لقراءة الكتب الجديدة.", |
| "pipeline_corrected": "الطلاب ذهبوا إلى المكتبة لقراءة الكتب الجديدة.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "الجديدة.", |
| "end": 45, |
| "id": "3893b371-9b48-47db-b594-af7c91784cf0", |
| "locked": true, |
| "original": "الجديدة", |
| "priority": 2, |
| "start": 38, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [ |
| "إلى", |
| "ال", |
| "الم", |
| "الى" |
| ], |
| "confidence": 0.9, |
| "correction": "إلى", |
| "end": 16, |
| "id": "59e00d41-8699-4ae1-bc78-ac1d9af75ad7", |
| "locked": true, |
| "original": "الى", |
| "priority": 1, |
| "start": 13, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 7703, |
| "pipeline_timing": { |
| "grammar_ms": 944, |
| "punctuation_ms": 888, |
| "spelling_ms": 2923, |
| "total_ms": 4764 |
| }, |
| "verdict": "PASS", |
| "root_cause": "StageLocker operating correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": false, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "SLK-004", |
| "category": "stagelocker", |
| "subcategory": "overlapping_patches", |
| "input_text": "الاطفال يلعبون بالكره في الحديقه الكبيره", |
| "expected_behavior": "Spelling: الاطفال→الأطفال, بالكره→بالكرة, الحديقه→الحديقة, الكبيره→الكبيرة — multiple overlapping spans", |
| "grammar_raw_output": "الأطفال يلعبون بالكرة في الحديقة الكبيرة", |
| "grammar_raw_ms": 3386, |
| "punctuation_raw_output": "الاطفال يلعبون بالكره في الحديقه الكبيره!", |
| "punctuation_raw_ms": 3407, |
| "pipeline_output": "الأطفال يلعبون بالكرة في الحديقة الكبيرة.", |
| "pipeline_corrected": "الأطفال يلعبون بالكرة في الحديقة الكبيرة.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "الكبيرة.", |
| "end": 40, |
| "id": "3aa85f52-d09d-4b37-b09b-22b62182b700", |
| "locked": true, |
| "original": "الكبيره", |
| "priority": 2, |
| "start": 33, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [ |
| "الأطفال", |
| "للاطفال", |
| "الاطفاء", |
| "الاطفال" |
| ], |
| "confidence": 0.9, |
| "correction": "الأطفال", |
| "end": 7, |
| "id": "303beeea-6796-4336-a28b-d2d5765bbe38", |
| "locked": true, |
| "original": "الاطفال", |
| "priority": 1, |
| "start": 0, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "بالكرة", |
| "بالكر", |
| "الكره", |
| "بالكره" |
| ], |
| "confidence": 0.9, |
| "correction": "بالكرة", |
| "end": 21, |
| "id": "cca7efd9-8123-4380-a468-3d0faa4dec13", |
| "locked": true, |
| "original": "بالكره", |
| "priority": 1, |
| "start": 15, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "الحديقة", |
| "الحديقه" |
| ], |
| "confidence": 0.9, |
| "correction": "الحديقة", |
| "end": 32, |
| "id": "b9274c96-4e7e-4c45-8ed3-95d5fe5cd88b", |
| "locked": true, |
| "original": "الحديقه", |
| "priority": 1, |
| "start": 25, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 8575, |
| "pipeline_timing": { |
| "grammar_ms": 893, |
| "punctuation_ms": 860, |
| "spelling_ms": 4372, |
| "total_ms": 6132 |
| }, |
| "verdict": "PASS", |
| "root_cause": "StageLocker operating correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "SLK-005", |
| "category": "stagelocker", |
| "subcategory": "backward_overwrite", |
| "input_text": "هذه المدينه جميله وهادئه", |
| "expected_behavior": "Three ه→ة fixes. Grammar must NOT overwrite any of them back to ه", |
| "grammar_raw_output": "هذه المدينة جميلة وهادئة", |
| "grammar_raw_ms": 4014, |
| "punctuation_raw_output": "هذه المدينه جميله وهادئه!", |
| "punctuation_raw_ms": 3050, |
| "pipeline_output": "هذه المدينة جميلة وهادئة!", |
| "pipeline_corrected": "هذه المدينة جميلة وهادئة!", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "وهادئة!", |
| "end": 24, |
| "id": "5171793c-ef57-4d42-8bf0-44bb0c4c3472", |
| "locked": true, |
| "original": "وهادئه", |
| "priority": 2, |
| "start": 18, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [ |
| "المدينة", |
| "المدين", |
| "المدينه" |
| ], |
| "confidence": 0.9, |
| "correction": "المدينة", |
| "end": 11, |
| "id": "76b1dbc3-590d-4db0-a353-ba2eb0e7fa76", |
| "locked": true, |
| "original": "المدينه", |
| "priority": 1, |
| "start": 4, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "جميلة", |
| "جميل", |
| "زميله", |
| "جميله" |
| ], |
| "confidence": 0.9, |
| "correction": "جميلة", |
| "end": 17, |
| "id": "7834d0e8-f4d2-421d-8b46-4199afe493b9", |
| "locked": true, |
| "original": "جميله", |
| "priority": 1, |
| "start": 12, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 6328, |
| "pipeline_timing": { |
| "grammar_ms": 711, |
| "punctuation_ms": 503, |
| "spelling_ms": 2463, |
| "total_ms": 3682 |
| }, |
| "verdict": "PASS", |
| "root_cause": "No backward overwrite detected", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "SLK-006", |
| "category": "stagelocker", |
| "subcategory": "grammar_overrides_spelling_adjacent", |
| "input_text": "الطالبه ذكي في المدرسه", |
| "expected_behavior": "Spelling fixes ه→ة, Grammar must fix gender (ذكي→ذكية) on ADJACENT word", |
| "grammar_raw_output": "الطالبة ذكية في المدرسة", |
| "grammar_raw_ms": 3893, |
| "punctuation_raw_output": "الطالبه ذكي في المدرسه.", |
| "punctuation_raw_ms": 3501, |
| "pipeline_output": "الطالبة ذكية في المدرسة.", |
| "pipeline_corrected": "الطالبة ذكية في المدرسة.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 1.0, |
| "correction": "الطالبة ذكية", |
| "end": 11, |
| "id": "d34734eb-f09f-47c4-9ee5-f16e474df973", |
| "locked": true, |
| "original": "الطالبه ذكي", |
| "priority": 3, |
| "start": 0, |
| "type": "grammar" |
| }, |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "المدرسة.", |
| "end": 22, |
| "id": "483c3a0a-1ac6-4c97-bfee-a7a514aef898", |
| "locked": true, |
| "original": "المدرسه", |
| "priority": 2, |
| "start": 15, |
| "type": "punctuation" |
| } |
| ], |
| "pipeline_ms": 7047, |
| "pipeline_timing": { |
| "grammar_ms": 646, |
| "punctuation_ms": 555, |
| "spelling_ms": 2952, |
| "total_ms": 4157 |
| }, |
| "verdict": "PASS", |
| "root_cause": "StageLocker operating correctly", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OVR-001", |
| "category": "overcorrection", |
| "subcategory": "correct_text_unchanged", |
| "input_text": "ذهب الطالب إلى المكتبة وقرأ كتاباً مفيداً", |
| "expected_behavior": "Perfectly correct text — should return UNCHANGED", |
| "grammar_raw_output": "ذهب الطالب إلى المكتبة وقرأ كتابا مفيدا", |
| "grammar_raw_ms": 3996, |
| "punctuation_raw_output": "ذهب الطالب إلى المكتبة وقرأ، كتاباً مفيداً", |
| "punctuation_raw_ms": 4282, |
| "pipeline_output": "ذهب الطالب إلى المكتبة وقرأ كتاباً مفيداً", |
| "pipeline_corrected": "ذهب الطالب إلى المكتبة وقرأ كتاباً مفيداً", |
| "pipeline_suggestions": [], |
| "pipeline_ms": 10781, |
| "pipeline_timing": { |
| "grammar_ms": 1207, |
| "punctuation_ms": 799, |
| "spelling_ms": 4593, |
| "total_ms": 6605 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Correct text preserved", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": false, |
| "raw_vs_pipeline_match": true, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OVR-002", |
| "category": "overcorrection", |
| "subcategory": "correct_grammar_unchanged", |
| "input_text": "المهندسون يعملون في المصنع الكبير بجدٍ واجتهاد", |
| "expected_behavior": "Correct SV agreement + tanween — must not be modified", |
| "grammar_raw_output": "المهندسون يعملون في المصنع الكبير بجد واجتهاد", |
| "grammar_raw_ms": 4220, |
| "punctuation_raw_output": "المهندسون يعملون في المصنع الكبير بجدٍ واجتهاد.", |
| "punctuation_raw_ms": 3964, |
| "pipeline_output": "المهندسون يعملون في المصنع الكبير بجدٍ واجتهاد.", |
| "pipeline_corrected": "المهندسون يعملون في المصنع الكبير بجدٍ واجتهاد.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "واجتهاد.", |
| "end": 46, |
| "id": "2ee09f18-187f-42a4-83bc-e81d696ffa80", |
| "locked": true, |
| "original": "واجتهاد", |
| "priority": 2, |
| "start": 39, |
| "type": "punctuation" |
| } |
| ], |
| "pipeline_ms": 10058, |
| "pipeline_timing": { |
| "grammar_ms": 948, |
| "punctuation_ms": 833, |
| "spelling_ms": 5345, |
| "total_ms": 7132 |
| }, |
| "verdict": "FAIL_FILTER", |
| "root_cause": "Correct text was modified: ['واجتهاد→واجتهاد.']", |
| "failure_detail": "All changes: ['واجتهاد→واجتهاد.']", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OVR-003", |
| "category": "overcorrection", |
| "subcategory": "jaccard_threshold_test", |
| "input_text": "جالس في البيت يقرأ الصحيفة", |
| "expected_behavior": "Correct text. Grammar should not hallucinate جالس→جاكسون (Jaccard < 0.3)", |
| "grammar_raw_output": "جالس في البيت يقرأ الصحيفة", |
| "grammar_raw_ms": 4351, |
| "punctuation_raw_output": "جالس في البيت يقرأ الصحيفة.", |
| "punctuation_raw_ms": 5021, |
| "pipeline_output": "جالس في البيت يقرأ الصحيفة.", |
| "pipeline_corrected": "جالس في البيت يقرأ الصحيفة.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "الصحيفة.", |
| "end": 26, |
| "id": "ec5b7d9a-fda2-4d2e-ab19-ffc202ef15f2", |
| "locked": true, |
| "original": "الصحيفة", |
| "priority": 2, |
| "start": 19, |
| "type": "punctuation" |
| } |
| ], |
| "pipeline_ms": 8821, |
| "pipeline_timing": { |
| "grammar_ms": 789, |
| "punctuation_ms": 548, |
| "spelling_ms": 3544, |
| "total_ms": 4887 |
| }, |
| "verdict": "PASS", |
| "root_cause": "No overcorrection detected", |
| "failure_detail": "", |
| "grammar_raw_changed": false, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OVR-004", |
| "category": "overcorrection", |
| "subcategory": "meaning_change_block", |
| "input_text": "وكان الجو صحواً اليوم", |
| "expected_behavior": "وكان must NOT become وكأن (directional block). Correct as-is", |
| "grammar_raw_output": "وكان الجو صحوا اليوم", |
| "grammar_raw_ms": 5367, |
| "punctuation_raw_output": "وكان الجو صحواً اليوم.", |
| "punctuation_raw_ms": 3066, |
| "pipeline_output": "وكان الجو صحواً اليوم.", |
| "pipeline_corrected": "وكان الجو صحواً اليوم.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "اليوم.", |
| "end": 21, |
| "id": "e02e158e-9dc7-4876-9d9b-d618eb58ab9f", |
| "locked": true, |
| "original": "اليوم", |
| "priority": 2, |
| "start": 16, |
| "type": "punctuation" |
| } |
| ], |
| "pipeline_ms": 6751, |
| "pipeline_timing": { |
| "grammar_ms": 788, |
| "punctuation_ms": 513, |
| "spelling_ms": 2977, |
| "total_ms": 4281 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Meaning preserved", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OVR-005", |
| "category": "overcorrection", |
| "subcategory": "rare_word_dampening", |
| "input_text": "الفيلسوف سقراط تأمل الحقيقة", |
| "expected_behavior": "سقراط is a rare valid name — spelling should not 'correct' it", |
| "grammar_raw_output": "الفيلسوف سقراط تأمل الحقيقة", |
| "grammar_raw_ms": 6077, |
| "punctuation_raw_output": "الفيلسوف سقراط تأمل الحقيقة.", |
| "punctuation_raw_ms": 4019, |
| "pipeline_output": "الفيلسوف سقراط تأمل الحقيقة.", |
| "pipeline_corrected": "الفيلسوف سقراط تأمل الحقيقة.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "الحقيقة.", |
| "end": 27, |
| "id": "509344fd-27fc-4476-9f09-7eb0ac1a87da", |
| "locked": true, |
| "original": "الحقيقة", |
| "priority": 2, |
| "start": 20, |
| "type": "punctuation" |
| } |
| ], |
| "pipeline_ms": 7657, |
| "pipeline_timing": { |
| "grammar_ms": 597, |
| "punctuation_ms": 580, |
| "spelling_ms": 2414, |
| "total_ms": 3593 |
| }, |
| "verdict": "PASS", |
| "root_cause": "No overcorrection detected", |
| "failure_detail": "", |
| "grammar_raw_changed": false, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OVR-006", |
| "category": "overcorrection", |
| "subcategory": "filter_over_blocking", |
| "input_text": "انا ذاهب الي المدرسه", |
| "expected_behavior": "IV-IV guard should NOT block انا→أنا or الي→إلى (these are whitelist entries)", |
| "grammar_raw_output": "أنا ذاهب إلى المدرسة", |
| "grammar_raw_ms": 5475, |
| "punctuation_raw_output": "انا ذاهب الي المدرسه.", |
| "punctuation_raw_ms": 4105, |
| "pipeline_output": "أنا ذاهب إلى المدرسة.", |
| "pipeline_corrected": "أنا ذاهب إلى المدرسة.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "المدرسة.", |
| "end": 20, |
| "id": "2c36a146-f2c7-4788-906e-5ccb09de7725", |
| "locked": true, |
| "original": "المدرسه", |
| "priority": 2, |
| "start": 13, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [ |
| "أنا", |
| "الا", |
| "ان", |
| "انا" |
| ], |
| "confidence": 0.9, |
| "correction": "أنا", |
| "end": 3, |
| "id": "1d5583a7-6781-4d91-a8d4-1c30d498ad40", |
| "locked": true, |
| "original": "انا", |
| "priority": 1, |
| "start": 0, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "إلى", |
| "ال", |
| "الم", |
| "الي" |
| ], |
| "confidence": 0.9, |
| "correction": "إلى", |
| "end": 12, |
| "id": "1ad036d9-d9de-489f-8664-f2b365602c1d", |
| "locked": true, |
| "original": "الي", |
| "priority": 1, |
| "start": 9, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 8499, |
| "pipeline_timing": { |
| "grammar_ms": 638, |
| "punctuation_ms": 399, |
| "spelling_ms": 3465, |
| "total_ms": 4506 |
| }, |
| "verdict": "PASS", |
| "root_cause": "No overcorrection detected", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OVR-007", |
| "category": "overcorrection", |
| "subcategory": "tanween_preservation", |
| "input_text": "قرأت كتاباً جميلاً عن التاريخ", |
| "expected_behavior": "Tanween (ً) must be preserved — grammar should not strip it", |
| "grammar_raw_output": "قرأت كتابا جميلا عن التاريخ", |
| "grammar_raw_ms": 5403, |
| "punctuation_raw_output": "قرأت كتاباً جميلاً عن التاريخ!", |
| "punctuation_raw_ms": 4864, |
| "pipeline_output": "قرأت كتاباً جميلاً عن التاريخ!", |
| "pipeline_corrected": "قرأت كتاباً جميلاً عن التاريخ!", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "التاريخ!", |
| "end": 29, |
| "id": "a516b100-8451-4611-a618-a3c914e05928", |
| "locked": true, |
| "original": "التاريخ", |
| "priority": 2, |
| "start": 22, |
| "type": "punctuation" |
| } |
| ], |
| "pipeline_ms": 5350, |
| "pipeline_timing": { |
| "grammar_ms": 1185, |
| "punctuation_ms": 730, |
| "spelling_ms": 2609, |
| "total_ms": 4529 |
| }, |
| "verdict": "FAIL_FILTER", |
| "root_cause": "Correct text was modified: ['التاريخ→التاريخ!']", |
| "failure_detail": "All changes: ['التاريخ→التاريخ!']", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OVR-008", |
| "category": "overcorrection", |
| "subcategory": "correct_feminine_form", |
| "input_text": "المعلمة الجديدة شرحت الدرس", |
| "expected_behavior": "Already correct — must NOT change المعلمة to المعلمه", |
| "grammar_raw_output": "المعلمة الجديدة شرحت الدرس", |
| "grammar_raw_ms": 4415, |
| "punctuation_raw_output": "المعلمة الجديدة شرحت الدرس.", |
| "punctuation_raw_ms": 1481, |
| "pipeline_output": "المعلمة الجديدة شرحت الدرس.", |
| "pipeline_corrected": "المعلمة الجديدة شرحت الدرس.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "الدرس.", |
| "end": 26, |
| "id": "31693a38-f540-437b-977b-f541204fa564", |
| "locked": true, |
| "original": "الدرس", |
| "priority": 2, |
| "start": 21, |
| "type": "punctuation" |
| } |
| ], |
| "pipeline_ms": 6679, |
| "pipeline_timing": { |
| "grammar_ms": 852, |
| "punctuation_ms": 643, |
| "spelling_ms": 1817, |
| "total_ms": 3314 |
| }, |
| "verdict": "FAIL_FILTER", |
| "root_cause": "Correct text was modified: ['الدرس→الدرس.']", |
| "failure_detail": "All changes: ['الدرس→الدرس.']", |
| "grammar_raw_changed": false, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OVR-009", |
| "category": "overcorrection", |
| "subcategory": "brackets_protection", |
| "input_text": "الفصل الأول (المقدمة) يتناول الموضوع", |
| "expected_behavior": "Brackets must be preserved. Grammar should not unbalance them", |
| "grammar_raw_output": "الفصل الأول لمقدمة يتناول الموضوع", |
| "grammar_raw_ms": 1685, |
| "punctuation_raw_output": "الفصل الأول (المقدمة): يتناول الموضوع؛", |
| "punctuation_raw_ms": 4323, |
| "pipeline_output": "الفصل الأول (المقدمة) يتناول الموضوع", |
| "pipeline_corrected": "الفصل الأول (المقدمة) يتناول الموضوع", |
| "pipeline_suggestions": [], |
| "pipeline_ms": 7948, |
| "pipeline_timing": { |
| "grammar_ms": 924, |
| "punctuation_ms": 1380, |
| "spelling_ms": 4723, |
| "total_ms": 7030 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Brackets preserved", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": false, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "OVR-010", |
| "category": "overcorrection", |
| "subcategory": "digits_protection", |
| "input_text": "تأسست الشركة عام 2020 وبلغ عدد موظفيها 150 شخصاً", |
| "expected_behavior": "Digits must NOT be corrupted by grammar model", |
| "grammar_raw_output": "تأسست الشركة عام 2020 وبلغ عدد موظفيها 150 شخصا", |
| "grammar_raw_ms": 4709, |
| "punctuation_raw_output": "تأسست الشركة عام 2020 وبلغ عدد موظفيها 150 شخصاً.", |
| "punctuation_raw_ms": 1835, |
| "pipeline_output": "تأسست الشركة عام يناير وبلغ عدد موظفيها خمسين شخصاً.", |
| "pipeline_corrected": "تأسست الشركة عام يناير وبلغ عدد موظفيها خمسين شخصاً.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "شخصاً.", |
| "end": 48, |
| "id": "3905f603-2a35-4786-a1cd-8d44c1995ba9", |
| "locked": true, |
| "original": "شخصاً", |
| "priority": 2, |
| "start": 43, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [ |
| "يناير", |
| "2020" |
| ], |
| "confidence": 0.6, |
| "correction": "يناير", |
| "end": 21, |
| "id": "99bdcd3f-20bf-4319-be00-cf116e7163a6", |
| "locked": true, |
| "original": "2020", |
| "priority": 1, |
| "start": 17, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "خمسين", |
| "150" |
| ], |
| "confidence": 0.6, |
| "correction": "خمسين", |
| "end": 42, |
| "id": "91023a54-9a4f-415c-83cc-746e12f64dc3", |
| "locked": true, |
| "original": "150", |
| "priority": 1, |
| "start": 39, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 15379, |
| "pipeline_timing": { |
| "grammar_ms": 1106, |
| "punctuation_ms": 905, |
| "spelling_ms": 9998, |
| "total_ms": 12016 |
| }, |
| "verdict": "FAIL_FILTER", |
| "root_cause": "Digits were corrupted", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "MIS-001", |
| "category": "model_mismatch", |
| "subcategory": "spelling_output_breaks_grammar", |
| "input_text": "الطالبه المجتهده حصلت علي درجات عاليه", |
| "expected_behavior": "Spelling: 4x ه→ة. Grammar should NOT break on the corrected output", |
| "grammar_raw_output": "الطالبة المجتهدة حصلت على درجات عالية", |
| "grammar_raw_ms": 1693, |
| "punctuation_raw_output": "الطالبه المجتهده حصلت علي درجات عاليه.", |
| "punctuation_raw_ms": 4126, |
| "pipeline_output": "الطالبة المجتهدة حصلت علي درجات عالية.", |
| "pipeline_corrected": "الطالبة المجتهدة حصلت علي درجات عالية.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "عالية.", |
| "end": 37, |
| "id": "0405a474-1ea1-4d28-bca2-c3b8fc393b13", |
| "locked": true, |
| "original": "عاليه", |
| "priority": 2, |
| "start": 32, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [ |
| "الطالبة", |
| "الطالب", |
| "الطالبه" |
| ], |
| "confidence": 0.9, |
| "correction": "الطالبة", |
| "end": 7, |
| "id": "64cd41c7-89da-46b2-b750-5555fdb7def0", |
| "locked": true, |
| "original": "الطالبه", |
| "priority": 1, |
| "start": 0, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "المجتهدة", |
| "المجتهد", |
| "المجتهده" |
| ], |
| "confidence": 0.9, |
| "correction": "المجتهدة", |
| "end": 16, |
| "id": "c3b7cd46-ba07-4d6f-942e-fe1425e2b195", |
| "locked": true, |
| "original": "المجتهده", |
| "priority": 1, |
| "start": 8, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 6675, |
| "pipeline_timing": { |
| "grammar_ms": 904, |
| "punctuation_ms": 859, |
| "spelling_ms": 4231, |
| "total_ms": 6003 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Grammar handled spelling-corrected input", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "MIS-002", |
| "category": "model_mismatch", |
| "subcategory": "grammar_undoes_spelling", |
| "input_text": "ذهبنا الي المكتبه القريبه", |
| "expected_behavior": "Spelling fixes الي→إلى, المكتبه→المكتبة. Grammar must NOT revert these", |
| "grammar_raw_output": "ذهبنا إلى المكتبة القريبة", |
| "grammar_raw_ms": 3975, |
| "punctuation_raw_output": "ذهبنا الي المكتبه القريبه.", |
| "punctuation_raw_ms": 1300, |
| "pipeline_output": "ذهبنا إلى المكتبة القريبة.", |
| "pipeline_corrected": "ذهبنا إلى المكتبة القريبة.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "القريبة.", |
| "end": 25, |
| "id": "bc5dd39c-d7b1-4b9a-b7bd-f62a6d5d3f3d", |
| "locked": true, |
| "original": "القريبه", |
| "priority": 2, |
| "start": 18, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [ |
| "إلى", |
| "ال", |
| "الم", |
| "الي" |
| ], |
| "confidence": 0.9, |
| "correction": "إلى", |
| "end": 9, |
| "id": "076de2fe-4498-42bb-b3c8-4ace6cf17958", |
| "locked": true, |
| "original": "الي", |
| "priority": 1, |
| "start": 6, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "المكتبة", |
| "المكتب", |
| "المشتبه", |
| "المكتبه" |
| ], |
| "confidence": 0.9, |
| "correction": "المكتبة", |
| "end": 17, |
| "id": "6a5d280b-17d1-4122-aa8a-71371c304412", |
| "locked": true, |
| "original": "المكتبه", |
| "priority": 1, |
| "start": 10, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 6505, |
| "pipeline_timing": { |
| "grammar_ms": 698, |
| "punctuation_ms": 523, |
| "spelling_ms": 2621, |
| "total_ms": 3850 |
| }, |
| "verdict": "PASS", |
| "root_cause": "Spelling corrections preserved through grammar", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "MIS-003", |
| "category": "model_mismatch", |
| "subcategory": "cascading_length_change", |
| "input_text": "اريد ان اذهب الي المدرسه لانني احب القراءه", |
| "expected_behavior": "Many hamza + ه→ة fixes. Total text length changes significantly — grammar must handle shifted text", |
| "grammar_raw_output": "أريد أن أذهب إلى المدرسة لأنني أحب القراءة", |
| "grammar_raw_ms": 1581, |
| "punctuation_raw_output": "اريد ان اذهب الي المدرسه لانني؛ احب القراءه", |
| "punctuation_raw_ms": 3600, |
| "pipeline_output": "أريد أن أذهب إلى المدرسة لأنني أحب القراءة.", |
| "pipeline_corrected": "أريد أن أذهب إلى المدرسة لأنني أحب القراءة.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "القراءة.", |
| "end": 42, |
| "id": "d2e08076-8ac6-4e91-8fc0-0eb1d7e7577a", |
| "locked": true, |
| "original": "القراءه", |
| "priority": 2, |
| "start": 35, |
| "type": "punctuation" |
| }, |
| { |
| "alternatives": [], |
| "confidence": 1.0, |
| "correction": "لأنني", |
| "end": 30, |
| "id": "c15ca269-0b85-4795-880a-ddf56a205817", |
| "locked": true, |
| "original": "لانني", |
| "priority": 1, |
| "start": 25, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "أريد", |
| "يريد", |
| "تريد", |
| "اريد" |
| ], |
| "confidence": 0.9, |
| "correction": "أريد", |
| "end": 4, |
| "id": "b97dcb5a-12cf-464e-99e2-85de15de80cf", |
| "locked": true, |
| "original": "اريد", |
| "priority": 1, |
| "start": 0, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "أن", |
| "ال", |
| "من", |
| "ان" |
| ], |
| "confidence": 0.9, |
| "correction": "أن", |
| "end": 7, |
| "id": "9e37bf45-10d4-4114-b31f-011110310241", |
| "locked": true, |
| "original": "ان", |
| "priority": 1, |
| "start": 5, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "أذهب", |
| "الذهب", |
| "ذهب", |
| "اذهب" |
| ], |
| "confidence": 0.9, |
| "correction": "أذهب", |
| "end": 12, |
| "id": "0952785f-40cb-4860-82ef-18b3cf85f53f", |
| "locked": true, |
| "original": "اذهب", |
| "priority": 1, |
| "start": 8, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "إلى", |
| "ال", |
| "الم", |
| "الي" |
| ], |
| "confidence": 0.9, |
| "correction": "إلى", |
| "end": 16, |
| "id": "92973715-dfca-4a84-bf9a-2903b53478b2", |
| "locked": true, |
| "original": "الي", |
| "priority": 1, |
| "start": 13, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "المدرسة", |
| "المدرسي", |
| "المدرس", |
| "المدرسه" |
| ], |
| "confidence": 0.9, |
| "correction": "المدرسة", |
| "end": 24, |
| "id": "8cc179c2-89ea-4235-b0a3-05e00e1e6482", |
| "locked": true, |
| "original": "المدرسه", |
| "priority": 1, |
| "start": 17, |
| "type": "spelling" |
| }, |
| { |
| "alternatives": [ |
| "أحب", |
| "الب", |
| "احت", |
| "احب" |
| ], |
| "confidence": 0.9, |
| "correction": "أحب", |
| "end": 34, |
| "id": "b0432045-ba7a-45fb-b538-efe62ff83026", |
| "locked": true, |
| "original": "احب", |
| "priority": 1, |
| "start": 31, |
| "type": "spelling" |
| } |
| ], |
| "pipeline_ms": 13520, |
| "pipeline_timing": { |
| "grammar_ms": 1105, |
| "punctuation_ms": 836, |
| "spelling_ms": 10929, |
| "total_ms": 12888 |
| }, |
| "verdict": "PASS", |
| "root_cause": "No model mismatch detected", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "MIS-004", |
| "category": "model_mismatch", |
| "subcategory": "grammar_hallucination_on_corrected", |
| "input_text": "الاولاد يلعبون والبنات يذهبن", |
| "expected_behavior": "Spelling: الاولاد→الأولاد. Grammar should NOT hallucinate on already-correct يلعبون/يذهبن", |
| "grammar_raw_output": "الاولاد يلعبون والبنات يذهبن", |
| "grammar_raw_ms": 4826, |
| "punctuation_raw_output": "الاولاد يلعبون والبنات يذهبن.", |
| "punctuation_raw_ms": 1438, |
| "pipeline_output": "الاولاد يلعبون والبنات يذهبن.", |
| "pipeline_corrected": "الاولاد يلعبون والبنات يذهبن.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "يذهبن.", |
| "end": 28, |
| "id": "1b722906-7c41-4041-966b-405f03698d6c", |
| "locked": true, |
| "original": "يذهبن", |
| "priority": 2, |
| "start": 23, |
| "type": "punctuation" |
| } |
| ], |
| "pipeline_ms": 6558, |
| "pipeline_timing": { |
| "grammar_ms": 683, |
| "punctuation_ms": 632, |
| "spelling_ms": 2822, |
| "total_ms": 4140 |
| }, |
| "verdict": "PASS", |
| "root_cause": "No model mismatch detected", |
| "failure_detail": "", |
| "grammar_raw_changed": false, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| }, |
| { |
| "vector_id": "MIS-005", |
| "category": "model_mismatch", |
| "subcategory": "punc_on_grammar_corrected", |
| "input_text": "السيارات سريعة والطرق واسعه", |
| "expected_behavior": "After spelling (واسعه→واسعة), punctuation should add period at end, not corrupt words", |
| "grammar_raw_output": "السيارات سريعة والطرق واسعة", |
| "grammar_raw_ms": 1454, |
| "punctuation_raw_output": "السيارات سريعة والطرق واسعه.", |
| "punctuation_raw_ms": 3587, |
| "pipeline_output": "السيارات سريعة والطرق واسعة.", |
| "pipeline_corrected": "السيارات سريعة والطرق واسعة.", |
| "pipeline_suggestions": [ |
| { |
| "alternatives": [], |
| "confidence": 0.8, |
| "correction": "واسعة.", |
| "end": 27, |
| "id": "9780815c-9786-43c9-a81a-75437a0a9313", |
| "locked": true, |
| "original": "واسعه", |
| "priority": 2, |
| "start": 22, |
| "type": "punctuation" |
| } |
| ], |
| "pipeline_ms": 4889, |
| "pipeline_timing": { |
| "grammar_ms": 554, |
| "punctuation_ms": 668, |
| "spelling_ms": 2875, |
| "total_ms": 4103 |
| }, |
| "verdict": "PASS", |
| "root_cause": "No model mismatch detected", |
| "failure_detail": "", |
| "grammar_raw_changed": true, |
| "pipeline_changed": true, |
| "raw_vs_pipeline_match": false, |
| "span_errors": [], |
| "offset_drift": 0 |
| } |
| ] |
| } |