300 lines
14 KiB
JSON
300 lines
14 KiB
JSON
{
|
|
"created_at_utc": "2026-10-03T16:56:05.641170+00:00",
|
|
"base_url": "http://127.0.0.1:8000",
|
|
"dataset": "evals\\knowledge_retrieval_project.jsonl",
|
|
"indexing": {
|
|
"semantic_indexed_documents": 4,
|
|
"documents": 4,
|
|
"embedding_models": [
|
|
"granite-embedding:278m"
|
|
]
|
|
},
|
|
"metrics": {
|
|
"cases": 9,
|
|
"hit_at_1": 0.6666666666666666,
|
|
"hit_at_3": 1.0,
|
|
"mean_reciprocal_rank": 0.8148148148148148,
|
|
"evidence_rate": 0.6666666666666666
|
|
},
|
|
"results": [
|
|
{
|
|
"id": "project-path-confinement",
|
|
"query": "Does resolving a requested source path guarantee it stays under the selected root?",
|
|
"expected_document": "fixture_workspace.py",
|
|
"expected_evidence": "relative_to(root)",
|
|
"rank": 1,
|
|
"top_paths": [
|
|
"fixture_workspace.py",
|
|
"fixture_main.py"
|
|
],
|
|
"expected_document_chunks": [
|
|
5,
|
|
19,
|
|
1
|
|
],
|
|
"evidence_found": true,
|
|
"search_mode": "hybrid",
|
|
"agent_answer": "لم يتم العثور على أي مقتطفات في قاعدة المعرفة تشير إلى ما إذا كان حل مسار مصدر مطلوب يضمن بقاءه تحت الجذر المحدد.",
|
|
"agent_tool": "search_knowledge",
|
|
"agent_files": [
|
|
"fixture_main.py",
|
|
"fixture_workspace.py",
|
|
"fixture_knowledge.py"
|
|
],
|
|
"agent_steps": [
|
|
{
|
|
"tool": "search_knowledge",
|
|
"status": "completed"
|
|
}
|
|
],
|
|
"human_rating": null
|
|
},
|
|
{
|
|
"id": "project-preview-stale-file",
|
|
"query": "How does applying an approved preview detect that the original file changed after review?",
|
|
"expected_document": "fixture_workspace.py",
|
|
"expected_evidence": "expected_hash",
|
|
"rank": 2,
|
|
"top_paths": [
|
|
"fixture_main.py",
|
|
"fixture_workspace.py"
|
|
],
|
|
"expected_document_chunks": [
|
|
11,
|
|
13,
|
|
12,
|
|
14
|
|
],
|
|
"evidence_found": true,
|
|
"search_mode": "hybrid",
|
|
"agent_answer": "للاكتشاف ما إذا كان الملف الأصلي قد تغير بعد المراجعة عند تطبيق المعاينة المعتمدة، يتم التحقق مما إذا كان المسار المستهدف لا يزال دون تغيير.\n\nالمصدر: fixture_workspace.py · المقطع 13:\nيتم تخزين المعاينات في `_pending_changes` مع تضمين `expected_hash` (تجزئة SHA256 للمحتوى الأصلي)، والذي يتم مقارنته ضمنيًا (على الرغم من أن النص لا يوضح عملية المقارنة النهائية) عند تطبيق التغيير أو التحقق منه.\n\nيتم تطبيق التغيير باستخدام الدالة `apply_change_preview`، والتي تتحقق من صلاحية المعاينة بناءً على:\n```python\nif proposal is None or float(proposal[\"expires_at\"]) <= time.time():\n _pending_changes.pop(token, None)\n raise Value\n```\nهذا يضمن أن المعاينة لا تزال سارية المفعول (لم تنتهِ صلاحيتها).\n\nبالإضافة إلى ذلك، يتم تضمين معلومات التغيير مثل `path`، و `operation`، و `content`، و `expected_hash`، و `expires_at` في المعاينة.\n\nالمصدر: fixture_workspace.py · المقطع 13:\n```python\n \"expected_hash\": hashlib.sha256(original).hexdigest(),\n```",
|
|
"agent_tool": "search_knowledge",
|
|
"agent_files": [
|
|
"fixture_workspace.py",
|
|
"fixture_main.py"
|
|
],
|
|
"agent_steps": [
|
|
{
|
|
"tool": "search_knowledge",
|
|
"status": "completed"
|
|
}
|
|
],
|
|
"human_rating": null
|
|
},
|
|
{
|
|
"id": "project-index-stale-source",
|
|
"query": "Which file hash is compared with the stored content hash before returning a search result?",
|
|
"expected_document": "fixture_knowledge.py",
|
|
"expected_evidence": "actual_hash == row[\"content_hash\"]",
|
|
"rank": 3,
|
|
"top_paths": [
|
|
"fixture_main.py",
|
|
"fixture_workspace.py",
|
|
"fixture_knowledge.py"
|
|
],
|
|
"expected_document_chunks": [
|
|
11
|
|
],
|
|
"evidence_found": false,
|
|
"search_mode": "hybrid",
|
|
"agent_answer": "لا توجد معلومات ملموسة في المقاطع المسترجعة حول أي ملف تجري مقارنة لتجزئة (hash) مع تجزئة المحتوى المخزنة قبل إرجاع نتيجة بحث.\n\nالمصدر: fixture_main.py · المقطع 11",
|
|
"agent_tool": "search_knowledge",
|
|
"agent_files": [
|
|
"fixture_main.py",
|
|
"fixture_knowledge.py"
|
|
],
|
|
"agent_steps": [
|
|
{
|
|
"tool": "search_knowledge",
|
|
"status": "completed"
|
|
}
|
|
],
|
|
"human_rating": null
|
|
},
|
|
{
|
|
"id": "project-chunk-overlap",
|
|
"query": "What are the configured chunk size and overlap for local knowledge indexing?",
|
|
"expected_document": "fixture_knowledge.py",
|
|
"expected_evidence": "CHUNK_OVERLAP = 120",
|
|
"rank": 1,
|
|
"top_paths": [
|
|
"fixture_knowledge.py",
|
|
"fixture_main.py"
|
|
],
|
|
"expected_document_chunks": [
|
|
3,
|
|
0,
|
|
16
|
|
],
|
|
"evidence_found": true,
|
|
"search_mode": "hybrid",
|
|
"agent_answer": "المقطع يحدد حجم القطعة والتداخل عبر الدالة `_chunks` في ملف `fixture_knowledge.py`.\n\n* **حجم القطعة (CHUNK\\_SIZE):** 1000\n* **التداخل (CHUNK\\_OVERLAP):** 120\n\nالمصدر: fixture\\_knowledge.py · المقطع 15",
|
|
"agent_tool": "search_knowledge",
|
|
"agent_files": [
|
|
"fixture_knowledge.py",
|
|
"fixture_main.py"
|
|
],
|
|
"agent_steps": [
|
|
{
|
|
"tool": "search_knowledge",
|
|
"status": "completed"
|
|
}
|
|
],
|
|
"human_rating": null
|
|
},
|
|
{
|
|
"id": "project-arabic-audio-variants",
|
|
"query": "كيف يربط فهرس المعرفة بين تعابير عربية مختلفة عند البحث عن تفريغ التسجيل؟",
|
|
"expected_document": "fixture_knowledge.py",
|
|
"expected_evidence": "QUERY_SYNONYMS",
|
|
"rank": 1,
|
|
"top_paths": [
|
|
"fixture_knowledge.py",
|
|
"fixture_main.py"
|
|
],
|
|
"expected_document_chunks": [
|
|
1,
|
|
0
|
|
],
|
|
"evidence_found": true,
|
|
"search_mode": "hybrid",
|
|
"agent_answer": "لم يتم العثور على أي معلومات تربط بين فهرس المعرفة وتعابير عربية مختلفة عند البحث عن تفريغ التسجيل.\n\nالمقاطع المسترجعة لا تحتوي على إجابة مباشرة لهذا السؤال.",
|
|
"agent_tool": "search_knowledge",
|
|
"agent_files": [
|
|
"fixture_main.py",
|
|
"fixture_knowledge.py"
|
|
],
|
|
"agent_steps": [
|
|
{
|
|
"tool": "search_knowledge",
|
|
"status": "completed"
|
|
}
|
|
],
|
|
"human_rating": null
|
|
},
|
|
{
|
|
"id": "project-pdf-page-bound",
|
|
"query": "What is the maximum number of PDF pages accepted during local extraction?",
|
|
"expected_document": "fixture_pdf.py",
|
|
"expected_evidence": "MAX_PDF_PAGES = 30",
|
|
"rank": 1,
|
|
"top_paths": [
|
|
"fixture_pdf.py",
|
|
"fixture_main.py"
|
|
],
|
|
"expected_document_chunks": [
|
|
2,
|
|
0,
|
|
1
|
|
],
|
|
"evidence_found": true,
|
|
"search_mode": "hybrid",
|
|
"agent_answer": "لم يتم العثور على معلومة محددة حول الحد الأقصى لعدد صفحات PDF المقبولة أثناء الاستخراج المحلي.\n\nالمقاطع المسترجعة تشير إلى وجود حد أقصى للصفحات عند قراءة ملف PDFات:\n* في `fixture_pdf.py` المقطع 2، هناك فحص للحد الأقصى للصفحات: `if len(reader.pages) > max_pages: raise PdfDocumentError(413, f\"الحد الأقصى {max_pages} صفحة لكل PDF: {name}.\")`، مما يعني أن الحد الأقصى للصفحات يعتمد على المتغير `max_pages`، ولم يتم تحديد قيمته.\n* في `fixture_pdf.py` المقطع 1، الدالة `extract_pdf_pages_text` تستخدم المعامل `max_pages`، ولكن لا يوجد تعريف لقيمة افتراضية له في هذا المقطع.\n\nبالإضافة إلى ذلك، تشير مقاطع أخرى إلى حدود أخرى مثل \"الحد الأقصى 8 ميغابايت لكل PDF\" و \"حد الفهرسة 2 ميغابايت لكل طلب\" في `fixture_main.py` المقطع 43.\n\nبناءً على ما تم استرجاعه، لا يمكنني تحديد العدد الأقصى لصفحات PDF المقبولة بشكل قاطع.",
|
|
"agent_tool": "search_knowledge",
|
|
"agent_files": [
|
|
"fixture_pdf.py",
|
|
"fixture_main.py"
|
|
],
|
|
"agent_steps": [
|
|
{
|
|
"tool": "search_knowledge",
|
|
"status": "completed"
|
|
}
|
|
],
|
|
"human_rating": null
|
|
},
|
|
{
|
|
"id": "project-pdf-empty-scan",
|
|
"query": "ما الذي يحدث إذا رفع المستخدم ملف PDF ممسوحًا ولا يحتوي نصًا قابلًا للاستخراج؟",
|
|
"expected_document": "fixture_pdf.py",
|
|
"expected_evidence": "لا يحتوي PDF على نص قابل للاستخراج",
|
|
"rank": 2,
|
|
"top_paths": [
|
|
"fixture_main.py",
|
|
"fixture_pdf.py"
|
|
],
|
|
"expected_document_chunks": [
|
|
9
|
|
],
|
|
"evidence_found": false,
|
|
"search_mode": "hybrid",
|
|
"agent_answer": "لم يتم توفير معلومات مباشرة في المقاطع المسترجعة حول ما يحدث إذا تم رفع ملف PDF ممسوحًا ولا يحتوي على نص قابل للاستخراج. ومع ذلك، يُشير المقطع من `fixture_pdf.py` إلى سيناريو يتعلق بعدم وجود نص قابل للاستخراج:\n\n\"لا يحتوي PDF على نص قابل للاستخراج؛ قد تكون صفحاته صورًا ممسوحة: {name}.\" (المقطع 1 من `fixture_pdf.py`)\n\nهذا يشير إلى أن النظام قد يواجه مشكلة إذا لم يتمكن من استخراج نص من ملف PDF (قد يكون ممسوحًا)، حيث يتم رفع استثناء `PdfDocumentError` برمز الخطأ 415.\n\n**مسار المصدر:** `fixture_pdf.py`، المقطع 1.",
|
|
"agent_tool": "search_knowledge",
|
|
"agent_files": [
|
|
"fixture_main.py",
|
|
"fixture_pdf.py"
|
|
],
|
|
"agent_steps": [
|
|
{
|
|
"tool": "search_knowledge",
|
|
"status": "completed"
|
|
}
|
|
],
|
|
"human_rating": null
|
|
},
|
|
{
|
|
"id": "project-skill-tool-filter",
|
|
"query": "How is a tool call blocked when it is outside the selected skill permissions?",
|
|
"expected_document": "fixture_main.py",
|
|
"expected_evidence": "tool_name not in selected_skill.allowed_tools",
|
|
"rank": 1,
|
|
"top_paths": [
|
|
"fixture_main.py",
|
|
"fixture_workspace.py",
|
|
"fixture_knowledge.py"
|
|
],
|
|
"expected_document_chunks": [
|
|
102,
|
|
11,
|
|
99
|
|
],
|
|
"evidence_found": false,
|
|
"search_mode": "hybrid",
|
|
"agent_answer": "لم يتم توفير معلومات حول كيفية حظر استدعاء الأداة عندما يكون خارج أذونات المهارة المحددة.",
|
|
"agent_tool": "search_knowledge",
|
|
"agent_files": [
|
|
"fixture_main.py",
|
|
"fixture_knowledge.py"
|
|
],
|
|
"agent_steps": [
|
|
{
|
|
"tool": "search_knowledge",
|
|
"status": "completed"
|
|
}
|
|
],
|
|
"human_rating": null
|
|
},
|
|
{
|
|
"id": "project-agent-index-limits",
|
|
"query": "What file count and total size limits apply when indexing local knowledge?",
|
|
"expected_document": "fixture_knowledge.py",
|
|
"expected_evidence": "MAX_TOTAL_CHARS = 2_000_000",
|
|
"rank": 1,
|
|
"top_paths": [
|
|
"fixture_knowledge.py",
|
|
"fixture_main.py",
|
|
"fixture_workspace.py"
|
|
],
|
|
"expected_document_chunks": [
|
|
0
|
|
],
|
|
"evidence_found": true,
|
|
"search_mode": "hybrid",
|
|
"agent_answer": "لقد تم تحديد حدود للفهرسة بناءً على الأدوات المتاحة:\n\n* **حدود تحليل الملفات:**\n * الأداة `analyze_uploaded_code` تسمح بـ `max_files` قدره **3** و `max_total_bytes` قدره **524288** بايت (من `fixture_main.py · المقطع 28`).\n * الأداة `analyze_image` تسمح بـ `max_files` قدره **3** و `max_total_bytes` قدره **16777216** بايت (من `fixture_main.py · المقطع 26`).\n\n* **حدود قراءة الملفات (في سياق مساحة العمل):**\n * يتم رفض قراءة الملفات إذا كان حجمها أكبر من الحد المسموح به للقراءة (256 كيلوبايت) (من `fixture_workspace.py · المقطع 7`).\n\n* **حدود الفهرسة العامة:**\n * المعلومات حول الحد الأقصى لعدد الملفات الإجمالي وحجمه المحجوز عند فهرسة المعرفة المحلي غير محددة بشكل مباشر في المقاطع المسترجعة.\n\nالمصدر: fixture_main.py · المقطع 28، fixture_main.py · المقطع 26، fixture_workspace.py · المقطع 7",
|
|
"agent_tool": "search_knowledge",
|
|
"agent_files": [
|
|
"fixture_main.py",
|
|
"fixture_workspace.py"
|
|
],
|
|
"agent_steps": [
|
|
{
|
|
"tool": "search_knowledge",
|
|
"status": "completed"
|
|
}
|
|
],
|
|
"human_rating": null
|
|
}
|
|
],
|
|
"note": "Small deterministic fixture set. Retrieval metrics cover source ranking and evidence presence, not general RAG quality. Optional agent answers are retained for human review and are not auto-scored."
|
|
}
|