From bed9d5c7e959eaed636d4730600455b7b079f194 Mon Sep 17 00:00:00 2001 From: Chaim Date: Fri, 3 Apr 2026 12:54:42 +0000 Subject: [PATCH] Improve block-zayin: synthesize claims by topic + fix markdown JSON parsing block_writer: Rewrote block-zayin prompt to require synthesis by topic instead of listing each claim separately. Now produces 3 organized sections (appellants 8, committee 6, permit applicants 3+) instead of 40 scattered paragraphs. Target: 800-1500 words. claims_extractor: Fix markdown code block stripping (same bug as qa_validator had). Enables parsing claims from Claude responses wrapped in ```json blocks. Tested on Hecht: block-zayin from 40 paragraphs/1049 words to 17 organized paragraphs/1039 words. Structure now matches Dafna's original (3 parties, grouped by topic). Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/legal_mcp/services/block_writer.py | 17 +++++++++++------ .../src/legal_mcp/services/claims_extractor.py | 3 +++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/mcp-server/src/legal_mcp/services/block_writer.py b/mcp-server/src/legal_mcp/services/block_writer.py index 88e31cd..6b49604 100644 --- a/mcp-server/src/legal_mcp/services/block_writer.py +++ b/mcp-server/src/legal_mcp/services/block_writer.py @@ -148,16 +148,21 @@ BLOCK_PROMPTS = { "block-zayin": """כתוב את בלוק טענות הצדדים (בלוק ז, "תמצית טענות הצדדים") של החלטת ועדת ערר. -## כללים: -- כל טענה בסעיף נפרד, גוף שלישי ("העורר טוען כי...") -- סדר קבוע: טענות העוררים → עמדת הוועדה המקומית → עמדת מבקשי ההיתר (אם יש) +## כללים קריטיים: +- **סנתז טענות דומות** — אל תרשום כל טענה בנפרד. קבץ טענות דומות לנושא אחד. למשל: כל הטענות על הודעות → סעיף אחד, כל הטענות על רכוש משותף → סעיף אחד. +- גוף שלישי: "העוררים טוענים כי...", "הוועדה המקומית ציינה כי..." +- **מבנה קבוע עם 3 חלקים:** + 1. "טענות העוררים" — 8-12 סעיפים מקובצים לפי נושא + 2. "עמדת הוועדה המקומית" — 5-8 סעיפים + 3. "עמדת מבקשי ההיתר" (אם יש) — 5-10 סעיפים - כותרת: "תמצית טענות הצדדים" -- נאמנות מוחלטת למקור — לא לשנות, לא לקצר ללא ציון -- אין ניתוח, אין מסקנות, אין הערכה +- נאמנות למקור — לא להמציא טענות, אבל כן לאחד ולסכם טענות חוזרות +- אין ניתוח, אין מסקנות, אין הערכה ("טענה חלשה/חזקה") - רק מכתבי טענות מקוריים (לא השלמות טיעון) - מספור רציף +- **יעד אורך: 800-1500 מילים** -## טענות שחולצו: +## טענות שחולצו (קבץ טענות דומות לנושאים): {claims_context} ## פרטי התיק: diff --git a/mcp-server/src/legal_mcp/services/claims_extractor.py b/mcp-server/src/legal_mcp/services/claims_extractor.py index bf13b87..b4984c7 100644 --- a/mcp-server/src/legal_mcp/services/claims_extractor.py +++ b/mcp-server/src/legal_mcp/services/claims_extractor.py @@ -105,6 +105,9 @@ async def extract_claims_with_ai( ) raw = message.content[0].text.strip() + # Strip markdown code blocks if present + raw = re.sub(r"^```(?:json)?\s*", "", raw) + raw = re.sub(r"\s*```$", "", raw) try: # Extract JSON array from response json_match = re.search(r"\[.*\]", raw, re.DOTALL)