scripts/_pipeline_runtime.py — runtime עמידות משותף: עוטף רשימת-צעדים async ב-LangGraph StateGraph ליניארי עם AsyncSqliteSaver (checkpoint לכל צעד). קריסה/OOM ממשיכה מהצעד שנכשל במקום להריץ הכל מחדש. degradation חיננית: ללא langgraph → ריצה ליניארית כמו קודם (הכפתור לא נשבר). מימוש אחד לשני הפייפליינים (G2). final_halacha_pipeline.py — 4 הצעדים ([0]extract [1]citations [2]corroboration [3]panel) רצים דרך ה-runtime. CLI זהה + --fresh (ברירת-מחדל auto-resume). thread יציב לכל תיק; dry-run = preview נפרד (תמיד fresh). קריסה בפאנל [3] → resume מ-[3] (steps 0-2 שמורים). pyproject: extra "durable" (langgraph + langgraph-checkpoint-sqlite) — host-only, optional. data/checkpoints/ ב-.gitignore. גבול (X16 §1): LangGraph רק כמנוע-פנימי של הסקריפט — לא orchestrator (לא מסלול מקביל ל-Paperclip; G2/G12). #108 (atomic extract) קדם לזה כתנאי. אימות: test_pipeline_runtime.py — עם langgraph (venv-זמני): 3 passed (resume מדלג צעדים שהושלמו · fresh מריץ-מחדש · linear). בלי langgraph (venv משותף): 1 passed + 2 skipped (degradation). final_halacha מתקמפל ומיובא נקי בשני המצבים. הרצה end-to-end על הפייפליין החי (DB+LLM) — לאחר `pip install -e ".[durable]"` בעץ הראשי. Invariants: INV-DUR1 (עמידות), G2 (runtime יחיד), G3 (idempotency מחוזק). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
55 lines
1.8 KiB
TOML
55 lines
1.8 KiB
TOML
[project]
|
|
name = "legal-mcp"
|
|
version = "0.1.0"
|
|
description = "MCP server for AI-assisted legal decision drafting"
|
|
requires-python = ">=3.10"
|
|
dependencies = [
|
|
"mcp[cli]>=1.0.0",
|
|
"asyncpg>=0.29.0",
|
|
"pgvector>=0.3.0",
|
|
"voyageai>=0.3.0",
|
|
"python-dotenv>=1.0.0",
|
|
"pydantic>=2.0.0",
|
|
"pymupdf>=1.25.0",
|
|
"python-docx>=1.1.0",
|
|
"striprtf>=0.0.26",
|
|
"redis>=5.0.0",
|
|
"rq>=1.16.0",
|
|
"pillow>=10.0.0",
|
|
"google-cloud-vision>=3.7.0",
|
|
"fastapi>=0.115.0",
|
|
"uvicorn[standard]>=0.30.0",
|
|
"httpx>=0.27.0",
|
|
"infisicalsdk>=1.0.0",
|
|
"aioboto3>=13.0.0", # X14 object storage (MinIO/S3) — services/storage.py
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
# Tier-1 court-verdict fetch (X13) — host-only. The container can't run a
|
|
# browser, so these are NOT in the base deps; install on the host venv with
|
|
# `pip install -e ".[court-fetch]" && python -m camoufox fetch`. faster-whisper
|
|
# is only for the explicit-PDF-download reCAPTCHA fallback (the primary
|
|
# image-API path needs no solving).
|
|
court-fetch = [
|
|
"camoufox>=0.4.11",
|
|
"faster-whisper>=1.0.0",
|
|
"h2>=4.0.0", # Tier-0 supremedecisions uses httpx http2
|
|
]
|
|
# Durable execution for the local one-shot pipelines (X16 / INV-DUR1) —
|
|
# final_halacha_pipeline / final_learning_pipeline gain crash/OOM resume via
|
|
# scripts/_pipeline_runtime.py. HOST-ONLY (the pipelines run locally, not in the
|
|
# container): install on the host venv with `pip install -e ".[durable]"`. The
|
|
# runtime degrades gracefully to linear execution when these are absent, so the
|
|
# run-halacha / run-learning buttons keep working until then.
|
|
durable = [
|
|
"langgraph>=1.0,<2.0",
|
|
"langgraph-checkpoint-sqlite>=3.0",
|
|
]
|
|
|
|
[build-system]
|
|
requires = ["setuptools>=68.0"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[tool.setuptools.packages.find]
|
|
where = ["src"]
|