אימות-פסיקה: השלמה ברקע לתצוגה חלקית — 16 מתוך 32 טיעונים מקבלים הצעות בייצור #465

Open
opened 2026-08-05 13:43:15 +00:00 by chaim · 0 comments
Owner

What & Why

דף אימות-הפסיקה כבר לא נופל ולא איטי — PRs #462 · #463 · #464 סגרו את ה-500, את סינון-היתר ואת זמן-הטעינה החוזרת. מה שנשאר: התצוגה חוזרת חלקית בייצור.

מדידה דרך ה-API הציבורי אחרי הפריסה (2026-08-05):

תיק טעינה 1 טעינה 2 retrieval_complete טיעונים עם תמיכה
8124-09-24 26.5 שנ' 0.058 שנ' false 16 מתוך 32
1069-04-26 24.5 שנ' 0.053 שנ' false 16 מתוך 69

אותו קוד בדיוק על המארח מסיים 32 מתוך 32 ב-21.5 שנ' עם retrieval_complete=true. הקונטיינר איטי בערך פי-2 — הוא חולק CPU עם שרתי ה-MCP ועם תהליכי הסוכנים (עומס ~5 בזמן המדידה) — ולכן בתוך _RETRIEVAL_BUDGET_S = 22 מספיקים רק כמחצית החיפושים.

מכיוון שתצוגה חלקית נשמרת ב-cache ל-_PARTIAL_TTL_S = 90 שניות, היו"ר רואה 16 מתוך 32 עד שירענן אחרי דקה וחצי — ואז עשוי לקבל 16 אחרים, כי אין המשכיות בין הריצות. זה טוב בהרבה מ-500 או מאפס הצעות, אבל זו עדיין תמונה חלקית שנראית שלמה למי שלא בודק את הדגל.

הפתרון המוצע — השלמה ברקע

התצוגה תמשיך לחזור מיד עם מה שהספיק, ומשימת-רקע תמשיך לחפש רק עבור הטיעונים שנותרו ותעדכן את הרשומה ב-cache. הטעינה הבאה תהיה שלמה, בלי להאריך את ההמתנה של אף אחד.

התשתית כבר קיימת ולא צריך לבנות אותה מחדש:

  • _view_cache כבר מבחין בין שלם לחלקי (expires_at is None מול TTL).
  • retrieval_complete כבר נישא בתשובה עד ה-UI.
  • _inputs_fingerprint כבר מבטיח שהשלמה על טביעה ישנה לא תיכתב על נתונים שהשתנו.

חסר רק מי שימלא את החסר.

נקודות עיצוב שצריך להכריע

  • איפה רצה המשימהasyncio.create_task בתוך הקונטיינר הוא הפשוט ביותר, אבל מת עם ה-worker. שווה לשקול אם זה מספיק או שצריך תור.
  • מרוץ מול הטביעה — לפני כתיבת ההשלמה ל-cache, לאמת שהטביעה לא זזה בינתיים (היו"ר אימת תקדים / הצבירה רצה מחדש). אם זזה — לזרוק, לא לכתוב.
  • הגבלת מקביליות — ההשלמה חייבת לכבד את אותו _MAX_CONCURRENT_LOOKUPS, אחרת היא תחזיר בדלת האחורית בדיוק את ההיצף ש-#462 חסם.
  • התנהגות ה-UI — כשהתצוגה חלקית, להראות שההצעות עדיין נטענות, ולא להציג טיעון בלי הצעות כאילו אין לו תקדים תומך (INV-AH — שתי טענות שונות).

Acceptance Criteria

  • תצוגה חלקית מפעילה השלמה ברקע רק לטיעונים חסרי-הצעות.
  • ההשלמה מכבדת את _MAX_CONCURRENT_LOOKUPS; אין קפיצה במקביליות מול Voyage.
  • לפני עדכון ה-cache — אימות שהטביעה זהה; אחרת ההשלמה נזרקת ואינה נכתבת.
  • אחרי השלמה, retrieval_complete=true ומספר הטיעונים עם תמיכה תואם את הריצה המלאה על המארח (32/32 ל-8124-09-24).
  • טעינה ראשונה נשארת מהירה — ההשלמה אינה מאריכה את זמן התגובה.
  • ה-UI מבחין בין "עדיין נטען" לבין "אין תקדים תומך" (INV-AH).
  • טסט: תצוגה חלקית → השלמה → retrieval_complete=true בקריאה הבאה; ו-טסט שהטביעה שהשתנתה מבטלת את הכתיבה.

הקשר

  • PRs שקדמו: #462 (פיזור מבוקר + תשובה חלקית) · #463 (סקאלת relevance) · #464 (cache מבוסס-טביעה)
  • קוד: mcp-server/src/legal_mcp/services/case_citation_verification.py
  • קשור: אם הדריפט של MULTIMODAL_ENABLED / STORAGE_BACKEND בין הקונטיינר לשרת ה-MCP ייסגר, ייתכן שזמני החיפוש ישתנו — שווה למדוד מחדש אחרי אותו תיקון לפני שמכיילים כאן.
## What & Why דף אימות-הפסיקה כבר לא נופל ולא איטי — PRs #462 · #463 · #464 סגרו את ה-500, את סינון-היתר ואת זמן-הטעינה החוזרת. מה שנשאר: **התצוגה חוזרת חלקית בייצור.** מדידה דרך ה-API הציבורי אחרי הפריסה (2026-08-05): | תיק | טעינה 1 | טעינה 2 | `retrieval_complete` | טיעונים עם תמיכה | |---|---|---|---|---| | 8124-09-24 | 26.5 שנ' | 0.058 שנ' | **false** | **16** מתוך 32 | | 1069-04-26 | 24.5 שנ' | 0.053 שנ' | **false** | **16** מתוך 69 | אותו קוד בדיוק על המארח מסיים **32 מתוך 32 ב-21.5 שנ'** עם `retrieval_complete=true`. הקונטיינר איטי בערך פי-2 — הוא חולק CPU עם שרתי ה-MCP ועם תהליכי הסוכנים (עומס ~5 בזמן המדידה) — ולכן בתוך `_RETRIEVAL_BUDGET_S = 22` מספיקים רק כמחצית החיפושים. מכיוון שתצוגה חלקית נשמרת ב-cache ל-`_PARTIAL_TTL_S = 90` שניות, היו"ר רואה 16 מתוך 32 עד שירענן אחרי דקה וחצי — ואז עשוי לקבל **16 אחרים**, כי אין המשכיות בין הריצות. זה טוב בהרבה מ-500 או מאפס הצעות, אבל זו עדיין תמונה חלקית שנראית שלמה למי שלא בודק את הדגל. ## הפתרון המוצע — השלמה ברקע התצוגה תמשיך לחזור מיד עם מה שהספיק, ומשימת-רקע תמשיך לחפש **רק עבור הטיעונים שנותרו** ותעדכן את הרשומה ב-cache. הטעינה הבאה תהיה שלמה, בלי להאריך את ההמתנה של אף אחד. התשתית כבר קיימת ולא צריך לבנות אותה מחדש: - `_view_cache` כבר מבחין בין שלם לחלקי (`expires_at is None` מול TTL). - `retrieval_complete` כבר נישא בתשובה עד ה-UI. - `_inputs_fingerprint` כבר מבטיח שהשלמה על טביעה ישנה לא תיכתב על נתונים שהשתנו. חסר רק מי שימלא את החסר. ## נקודות עיצוב שצריך להכריע - **איפה רצה המשימה** — `asyncio.create_task` בתוך הקונטיינר הוא הפשוט ביותר, אבל מת עם ה-worker. שווה לשקול אם זה מספיק או שצריך תור. - **מרוץ מול הטביעה** — לפני כתיבת ההשלמה ל-cache, לאמת שהטביעה לא זזה בינתיים (היו"ר אימת תקדים / הצבירה רצה מחדש). אם זזה — לזרוק, לא לכתוב. - **הגבלת מקביליות** — ההשלמה חייבת לכבד את אותו `_MAX_CONCURRENT_LOOKUPS`, אחרת היא תחזיר בדלת האחורית בדיוק את ההיצף ש-#462 חסם. - **התנהגות ה-UI** — כשהתצוגה חלקית, להראות שההצעות עדיין נטענות, ולא להציג טיעון בלי הצעות כאילו אין לו תקדים תומך (INV-AH — שתי טענות שונות). ## Acceptance Criteria - [ ] תצוגה חלקית מפעילה השלמה ברקע רק לטיעונים חסרי-הצעות. - [ ] ההשלמה מכבדת את `_MAX_CONCURRENT_LOOKUPS`; אין קפיצה במקביליות מול Voyage. - [ ] לפני עדכון ה-cache — אימות שהטביעה זהה; אחרת ההשלמה נזרקת ואינה נכתבת. - [ ] אחרי השלמה, `retrieval_complete=true` ומספר הטיעונים עם תמיכה תואם את הריצה המלאה על המארח (32/32 ל-8124-09-24). - [ ] טעינה ראשונה נשארת מהירה — ההשלמה אינה מאריכה את זמן התגובה. - [ ] ה-UI מבחין בין "עדיין נטען" לבין "אין תקדים תומך" (INV-AH). - [ ] טסט: תצוגה חלקית → השלמה → `retrieval_complete=true` בקריאה הבאה; ו-טסט שהטביעה שהשתנתה מבטלת את הכתיבה. ## הקשר - PRs שקדמו: #462 (פיזור מבוקר + תשובה חלקית) · #463 (סקאלת relevance) · #464 (cache מבוסס-טביעה) - קוד: `mcp-server/src/legal_mcp/services/case_citation_verification.py` - **קשור:** אם הדריפט של `MULTIMODAL_ENABLED` / `STORAGE_BACKEND` בין הקונטיינר לשרת ה-MCP ייסגר, ייתכן שזמני החיפוש ישתנו — שווה למדוד מחדש אחרי אותו תיקון לפני שמכיילים כאן.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ezer-mishpati/legal-ai#465