All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 1m50s
Stage C: per-page image embeddings via voyage-multimodal-3 + hybrid text+image search. Off by default; enable with MULTIMODAL_ENABLED=true. - Schema V9: document_image_embeddings + precedent_image_embeddings (vector(1024), page_number, image_thumbnail_path) - extractor.render_pages_for_multimodal renders PDF pages at MULTIMODAL_DPI (144) for embedding + JPEG thumbnails at MULTIMODAL_THUMB_DPI (96) for UI preview, in one pass - embeddings.embed_images calls voyage-multimodal-3 in 50-page batches - services/hybrid_search.py orchestrator: rerank applied to text side first (rerank-2 is text-only); image side cosine; weighted merge with text_weight 0.65 (env-tunable); image-only pages surface as match_type='image' so dense scanned content still appears - processor.process_document and precedent_library.ingest_precedent gated by flag — non-fatal on multimodal failure - scripts/multimodal_backfill.py — idempotent per-case CLI to embed existing documents without re-extracting text Validated locally on a 5-page response brief: render 0.31s, embed 8.32s, hybrid merge surfaces image rows correctly. Production rollout starts with flag=false (no behavior change), then per-case A/B. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6.3 KiB
6.3 KiB
scripts/ — מדריך סקריפטים
כלל: כל עדכון, יצירה, או מחיקה של סקריפט בתיקייה זו מחייב עדכון של קובץ זה.
סקריפטים פעילים
| Script | Type | Purpose | Scheduled |
|---|---|---|---|
auto-sync-cases.sh |
bash | סנכרון תיקי ערר ל-Gitea — רץ כל דקה | * * * * * (cron) |
backup-db.sh |
bash | גיבוי PostgreSQL יומי ל-data/backups/ (gzip) |
לתזמן: 0 2 * * * |
restore-db.sh |
bash | שחזור DB מגיבוי (companion ל-backup-db.sh) | ידני |
notify.py |
python | שליחת מייל התראה מסוכנים via SMTP (Gmail) | נקרא ע"י סוכנים |
bidi_table.py |
python | יצירת טבלאות box-drawing עם תמיכה ב-BiDi (עברית+אנגלית) | ספריית עזר |
convert_decision_template.py |
python | המרת data/training/טיוטת החלטה.dotx → skills/docx/decision_template.docx לטעינה ב-python-docx |
להריץ כשמתעדכנת התבנית |
deploy-track-changes.sh |
bash | סנכרון skills CMP↔CMPA + בדיקות + הנחיות deploy לארכיטקטורת Track Changes | ידני |
retrofit_case.py |
python | retrofit רטרואקטיבי — מזריק bookmarks לקובץ קיים של תיק ספציפי ומגדיר אותו כ-active_draft | ידני (חד-פעמי לתיק) |
reembed_voyage.py |
python | Re-embed כל הוקטורים ב-DB עם המודל ב-VOYAGE_MODEL (לאחר שינוי מודל). 5 טבלאות, 1024 דמ', batches של 100. ראה docs/voyage-upgrades-plan.md |
ידני (אחרי החלפת VOYAGE_MODEL) |
voyage_context3_poc.py |
python | POC #1 — voyage-3 vs voyage-context-3 על פסיקה אחת קצרה (קלמנוביץ, 63 chunks). הכרעה: context-3 לא מציג שיפור עקבי | בנצ'מרק חד-פעמי, נשמר לרפרנס |
voyage_context3_poc_long.py |
python | POC #2 — voyage-context-3 על פסיקה ארוכה (אהרון ברק 219 chunks) עם sliding windows. הכרעה: context-3 לא משתפר על פסיקה גדולה | בנצ'מרק חד-פעמי, נשמר לרפרנס |
voyage_multimodal_poc.py |
python | POC #3 — voyage-multimodal-3 על דוח שמאי (89 עמודים). הכרעה: שיפור משמעותי לטבלאות + 22 עמודי image-only שhttp text-OCR מאבד | בנצ'מרק חד-פעמי, מוכן לשלב C |
voyage_rerank_judge_poc.py |
python | POC #4 — voyage-3 vs rerank-2 vs context-3 על אהרון ברק, 18 שאילתות, claude-haiku-4-5 כ-judge. הכרעה: rerank-2 ניצח עם +9% mean@3 | בנצ'מרק חד-פעמי |
voyage_rerank_corpus_poc.py |
python | POC #5 — voyage-3 vs rerank-2 על קורפוס מלא (785 docs). הכרעה: +4.5% mean@3 כללי, +11.6% על P queries (practical) | בנצ'מרק חד-פעמי, אישר את שלב B |
multimodal_backfill.py |
python | Backfill voyage-multimodal-3 page embeddings על מסמכי תיקים קיימים. idempotent (skips by default), forces MULTIMODAL_ENABLED=true ל-run, רץ מהקונטיינר. שלב C — ראה docs/voyage-upgrades-plan.md |
ידני per-case (python multimodal_backfill.py 8174-24 8137-24) |
תיקיית .archive/ — סקריפטים שהושלמו
סקריפטים חד-פעמיים שהפונקציונליות שלהם הוטמעה ב-MCP server או ב-API. נשמרים ב-git לצורך היסטוריה — אין להריץ אותם.
| Script | Original Purpose | Superseded By |
|---|---|---|
backfill_pattern_frequency.py |
עדכון תדירות דפוסי סגנון ב-DB | web/app.py::_extract_pattern_variants() |
batch_upload_training.py |
העלאת קורפוס אימון (16 קבצים) | Web UI: /api/training/upload |
benchmark_embeddings.py |
השוואת מודלי embeddings (voyage-3 vs voyage-4) | הושלם — voyage-3-large נבחר |
benchmark_new_vs_old.py |
השוואת Google Vision vs markdown קיים | הושלם — בדיקה חד-פעמית לתיק 1130-25 |
decompose-decisions.py |
פירוק החלטות סופיות ל-12 בלוקים | MCP: write_block(), write_all_blocks() |
export-decision-docx.py |
ייצוא החלטה ל-DOCX | MCP: export_docx() |
extract-citations.py |
חילוץ ציטוטי פסיקה מבלוק י | MCP service: references_extractor.py |
extract-claims.py |
חילוץ טענות מבלוק ז | MCP: extract_claims() + claims_extractor.py |
extract_claims_8174.py |
חד-פעמי — חילוץ טענות חסרות לתיק 8174-24 אחרי timeout של האנליסט (43 טענות עורר נוספו 30/04/26) | phase 1: claude_session async + 30min timeout + chunking סמנטי |
extract_all_google_vision.py |
OCR בכמות עם Google Vision | MCP: document_upload() pipeline |
extract_originals.py |
חילוץ טקסט מ-PDF עם Claude Opus | MCP service: extractor.py |
extract_originals_ocr.py |
חילוץ OCR מלא מ-PDF | MCP service: extractor.py |
generate-embeddings.py |
יצירת embeddings לבלוקים ופסיקה | אוטומטי — נוצרים עם יצירת בלוקים |
link-claims-to-discussion.py |
קישור טענות לפסקאות דיון | MCP service: qa_validator.py |
proofread_training_corpus.py |
ניקוי Nevo מ-DOCX/PDF ל-Markdown | MCP service: proofreader.py + Web UI |
seed-appeals.py |
seeding תיקי ערר ראשוניים ל-DB | MCP: case_create() |
seed-knowledge.py |
seeding לקחים, ביטויי מעבר, פסיקה | MCP: record_chair_feedback(), precedent_attach() |
validate-decision.py |
ולידציה מול block-schema | MCP: validate_decision() + qa_validator.py |
סקריפטים שנמחקו (git history בלבד)
| Script | Reason |
|---|---|
import-final-decisions.py |
מיגרציה הושלמה — כל ההחלטות ב-data/training/ |
compare_extractions.py |
בדיקה חד-פעמית לתיק 1130-25 |
decompose-decisions-v2.py |
כפילות של v1 |
extract_google_vision.py |
hardcoded לתיק בודד |
extract_google_vision_single.py |
wrapper חד-פעמי |
test-search.py |
סקריפט דיבאג |