Replace all Anthropic API calls with Claude Code session (claude -p)
New module claude_session.py provides query() and query_json() that run prompts via `claude -p` CLI — uses the claude.ai session, zero API cost. Converted 6 services: - claims_extractor.py: extract_claims_with_ai - brainstorm.py: brainstorm_directions - block_writer.py: write_block (was streaming+thinking, now simple) - qa_validator.py: claims_coverage check - style_analyzer.py: 3 API calls (single pass, multi pass, synthesis) - learning_loop.py: extract_lessons Only extractor.py still uses Anthropic API (for PDF OCR with Vision). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -18,11 +18,9 @@ import logging
|
||||
import re
|
||||
from uuid import UUID
|
||||
|
||||
import anthropic
|
||||
|
||||
from legal_mcp import config
|
||||
from legal_mcp.config import parse_llm_json
|
||||
from legal_mcp.services import db
|
||||
from legal_mcp.services import db, claude_session
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -89,14 +87,6 @@ def check_neutral_background(blocks: list[dict]) -> dict:
|
||||
}
|
||||
|
||||
|
||||
_anthropic_client: anthropic.Anthropic | None = None
|
||||
|
||||
|
||||
def _get_anthropic() -> anthropic.Anthropic:
|
||||
global _anthropic_client
|
||||
if _anthropic_client is None:
|
||||
_anthropic_client = anthropic.Anthropic(api_key=config.ANTHROPIC_API_KEY)
|
||||
return _anthropic_client
|
||||
|
||||
|
||||
CLAIMS_CHECK_PROMPT = """אתה בודק איכות החלטות משפטיות. קיבלת רשימת טענות שהועלו בכתבי הטענות, ואת בלוק הדיון של ההחלטה.
|
||||
@@ -146,24 +136,15 @@ async def check_claims_coverage(blocks: list[dict], claims: list[dict]) -> dict:
|
||||
# Send full discussion — don't truncate
|
||||
discussion = yod["content"]
|
||||
|
||||
client = _get_anthropic()
|
||||
message = client.messages.create(
|
||||
model="claude-sonnet-4-20250514",
|
||||
max_tokens=8192,
|
||||
messages=[{
|
||||
"role": "user",
|
||||
"content": f"""{CLAIMS_CHECK_PROMPT}
|
||||
prompt = f"""{CLAIMS_CHECK_PROMPT}
|
||||
|
||||
## טענות ({len(source_claims)}):
|
||||
{claims_text}
|
||||
|
||||
## בלוק הדיון:
|
||||
{discussion}""",
|
||||
}],
|
||||
)
|
||||
{discussion}"""
|
||||
|
||||
raw = message.content[0].text.strip()
|
||||
parsed = parse_llm_json(raw)
|
||||
parsed = claude_session.query_json(prompt, timeout=120)
|
||||
if parsed is None:
|
||||
logger.warning("Failed to parse claims check: %s", raw[:300])
|
||||
# Fallback: assume all covered (don't block export on parse failure)
|
||||
|
||||
Reference in New Issue
Block a user