From 8a0c206ecdbd2b8720fd0cdf12ad175d8e022d1d Mon Sep 17 00:00:00 2001 From: Chaim Date: Sat, 30 May 2026 22:09:44 +0000 Subject: [PATCH] feat(reindex): precedent_reindex MCP tool (GAP-09, FU-3) Co-Authored-By: Claude Sonnet 4.6 --- mcp-server/src/legal_mcp/server.py | 6 ++++++ .../src/legal_mcp/tools/precedent_library.py | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/mcp-server/src/legal_mcp/server.py b/mcp-server/src/legal_mcp/server.py index 8aa9c3d..a9420e3 100644 --- a/mcp-server/src/legal_mcp/server.py +++ b/mcp-server/src/legal_mcp/server.py @@ -258,6 +258,12 @@ async def precedent_extract_metadata(case_law_id: str) -> str: return await plib.precedent_extract_metadata(case_law_id) +@mcp.tool() +async def precedent_reindex(case_law_id: str) -> str: + """re-chunk + re-embed פסיקה קיימת מה-full_text השמור (FU-3/GAP-09). אינו מריץ OCR/LLM — רק chunking + voyage embeddings. idempotent.""" + return await plib.precedent_reindex(case_law_id) + + @mcp.tool() async def style_corpus_enrich(corpus_id: str, overwrite: bool = False) -> str: """חילוץ מטא-דאטה (summary, outcome, key_principles, appeal_subtype) להחלטה בקורפוס הסגנון של דפנה. ברירת מחדל: ממלא רק שדות ריקים. שלח `overwrite=true` כדי לרענן.""" diff --git a/mcp-server/src/legal_mcp/tools/precedent_library.py b/mcp-server/src/legal_mcp/tools/precedent_library.py index a2855db..2f16347 100644 --- a/mcp-server/src/legal_mcp/tools/precedent_library.py +++ b/mcp-server/src/legal_mcp/tools/precedent_library.py @@ -215,6 +215,24 @@ async def precedent_extract_metadata(case_law_id: str) -> str: return _ok(result) +async def precedent_reindex(case_law_id: str) -> str: + """re-chunk + re-embed פסיקה קיימת מה-full_text השמור (FU-3/GAP-09). + + לתיקון drift של embeddings או אחרי שינוי-תוכן. אינו מריץ OCR/LLM — רק + chunking + voyage embeddings. idempotent (מוחק ובונה chunks מחדש). + """ + try: + cid = UUID(case_law_id) + except ValueError: + return _err("case_law_id לא תקין") + try: + from legal_mcp.services import ingest + result = await ingest.reindex_case_law(cid) + except Exception as e: + return _err(str(e)) + return _ok(result) + + async def precedent_process_pending(kind: str = "metadata", limit: int = 20) -> str: """ריקון תור בקשות חילוץ שנערמו ע"י כפתורי ה-UI. kind: 'metadata' או 'halacha'.