fix(retrieval): 104 החלטות ועדות-ערר היו בלתי-נראות בחיפוש — סינון ולא דירוג (#232)
`search_precedent_library` — הכלי שסוכני הכתיבה קוראים לו בפועל — לא חשף `source_kind` כלל, וכל שכבה מתחתיו נפלה לברירת-מחדל `external_upload`. התוצאה: `WHERE cl.source_kind = 'external_upload'` חתך 104 החלטות ועדות-ערר (29% מהקורפוס) עוד לפני הדירוג. ערר (חיפה) 83/16 — האסמכתה הישירה ביותר בקורפוס לטענת-סף ס-2 ב-1069-04-26 — לא הוחזרה גם בשאילתה כמעט-מילולית. ההיפותזה שנרשמה ב-#232 (הטיית verified/cite_count מדירה החלטות חדשות) **נבדקה ונפסלה**: כיסוי ה-verified כמעט זהה בשני הקורפוסים (55% מול 49%), ותקרת-ההטיה 0.22 לא הסבירה פער מול התאמה כמעט-מילולית. הסיבה הייתה סינום קשיח, לא דירוג. מה שונה - `_source_kind_clause()` — הגדרה אחת לאוצר-המילים של הסלקטור (G2), במקום שכפולו בכל אתר חיפוש/רשימה. `""`/`"all"` = כל הקורפוס; סלקטור לא-מוכר מרים ValueError במקום להגיע ל-SQL (הערך מוזרק ב-f-string, אז ה-whitelist הוא גם מה ששומר על זה בטוח). - ברירת-המחדל בכל שרשרת-החיפוש והרשימה: `""` = הקורפוס כולו. - `search_precedent_library` + `precedent_library_list` חושפים `source_kind` לסינון מפורש; `/api/precedent-library/search` מקבל אותו גם הוא כדי ש-UI ו-MCP לא יתפצלו. - נרמול מפריד במספר-תיק: `83/16` ו-`83-16` מחזירים את אותה שורה. אימות מול ה-DB החי — 4/4 החלטות ועדה חוזרות במקום **1** בשאילתה בלשון הלכה מאושרת (83-16, 1029-18, 1085-23, 1094-09-19 פדילה). 83/16 עלתה ל-0.711 מול 0.663 של 3213/97 שחסמה אותה קודם. רשימת-הקורפוס: 259 → 386. invariants: G1 (נרמול במקור, לא תיקון-תסמין בקריאה) · G2 (הגדרה אחת לסלקטור; UI ו-MCP על אותו מסלול) · §6 (סלקטור שגוי מתפוצץ, לא נבלע) טסטים: 5 חדשים (tests/test_source_kind_selector.py), אחד מהם נועל את ברירות-המחדל של 8 נקודות-הכניסה — זה בדיוק הבאג. 514 עוברים.
This commit is contained in:
@@ -96,10 +96,13 @@ async def precedent_library_list(
|
||||
precedent_level: str = "",
|
||||
source_type: str = "",
|
||||
search: str = "",
|
||||
source_kind: str = "external_upload",
|
||||
source_kind: str = "",
|
||||
limit: int = 100,
|
||||
) -> str:
|
||||
"""רשימה של פסיקה בקורפוס הסמכותי, עם פילטרים."""
|
||||
"""רשימה של פסיקה בקורפוס הסמכותי, עם פילטרים.
|
||||
|
||||
source_kind ריק (ברירת מחדל) = כל הקורפוס, כולל החלטות ועדות ערר.
|
||||
"""
|
||||
rows = await precedent_library.list_precedents(
|
||||
practice_area=practice_area,
|
||||
court=court,
|
||||
@@ -266,8 +269,9 @@ async def search_precedent_library(
|
||||
subject_tag: str = "",
|
||||
limit: int = 10,
|
||||
include_halachot: bool = True,
|
||||
source_kind: str = "",
|
||||
) -> str:
|
||||
"""חיפוש סמנטי בקורפוס הפסיקה הסמכותית.
|
||||
"""חיפוש סמנטי בקורפוס הפסיקה הסמכותית — פסקי דין **והחלטות ועדות ערר**.
|
||||
|
||||
מחזיר תוצאות מעורבות: הלכות (rule-level, מאושרות בלבד) + קטעי טקסט
|
||||
(passage-level). הלכות מקבלות boost קל בדירוג כי הן מזוקקות מראש.
|
||||
@@ -282,6 +286,9 @@ async def search_precedent_library(
|
||||
subject_tag: סינון לפי תגית נושא (לדוגמה "מועד_קביעת_שומה").
|
||||
limit: מספר תוצאות מקסימלי.
|
||||
include_halachot: האם לכלול הלכות (ברירת מחדל: כן).
|
||||
source_kind: ריק (ברירת מחדל) = כל הקורפוס — פסקי דין והחלטות ועדות
|
||||
ערר יחד. "external_upload" = פסקי בתי משפט בלבד;
|
||||
"internal_committee" = החלטות ועדות ערר בלבד.
|
||||
|
||||
Returns: רשימה מדורגת. כל פריט הוא {"type": "halacha"|"passage", "score", ...}.
|
||||
"""
|
||||
@@ -299,6 +306,7 @@ async def search_precedent_library(
|
||||
subject_tag=subject_tag,
|
||||
limit=limit,
|
||||
include_halachot=include_halachot,
|
||||
source_kind=source_kind,
|
||||
)
|
||||
# X11 Phase 2 (#154): attach the incoming-citation authority breakdown so the
|
||||
# research agent can WEIGH and ARGUE authority ("הלכה שאומצה ב-N החלטות ועדת-ערר")
|
||||
|
||||
Reference in New Issue
Block a user