fix(extractors): נטרול כלים בקריאות text→JSON — מניעת error_max_turns שמבזבז כסף #182

Merged
chaim merged 1 commits from worktree-halacha-tools-disable into main 2026-06-11 11:53:46 +00:00
9 changed files with 11 additions and 7 deletions
Showing only changes of commit d05c1e3fce - Show all commits

View File

@@ -103,7 +103,7 @@ async def extract_facts_from_document(
f"שמאי: {appraiser_name}{chunk_label}\n\n" f"שמאי: {appraiser_name}{chunk_label}\n\n"
f"--- תחילת שומה ---\n{chunk}\n--- סוף שומה ---" f"--- תחילת שומה ---\n{chunk}\n--- סוף שומה ---"
) )
result = await claude_session.query_json(prompt) result = await claude_session.query_json(prompt, tools="") # no tool_use → no error_max_turns
if not isinstance(result, list): if not isinstance(result, list):
logger.warning( logger.warning(
"extract_facts_from_document: chunk %d returned non-list (%s) for doc=%s", "extract_facts_from_document: chunk %d returned non-list (%s) for doc=%s",

View File

@@ -147,7 +147,7 @@ async def _aggregate_party(
prompt = _build_prompt(party, propositions) prompt = _build_prompt(party, propositions)
try: try:
raw_result = await claude_session.query_json(prompt) raw_result = await claude_session.query_json(prompt, tools="") # no tool_use → no error_max_turns
except RuntimeError as e: except RuntimeError as e:
# Surface CLI-unavailable specifically so the caller can report # Surface CLI-unavailable specifically so the caller can report
# cleanly instead of crashing the whole job. # cleanly instead of crashing the whole job.

View File

@@ -134,7 +134,7 @@ async def generate_directions(
{doc_context or '(אין מסמכים בתיק)'} {doc_context or '(אין מסמכים בתיק)'}
""" """
result = await claude_session.query_json(user_content) result = await claude_session.query_json(user_content, tools="") # no tool_use → no error_max_turns
if result is None: if result is None:
logger.warning("Failed to parse brainstorm response") logger.warning("Failed to parse brainstorm response")
return { return {

View File

@@ -135,7 +135,7 @@ async def _extract_chunk(
last_err: Exception | None = None last_err: Exception | None = None
for attempt in range(CHUNK_RETRY_ATTEMPTS + 1): for attempt in range(CHUNK_RETRY_ATTEMPTS + 1):
try: try:
claims = await claude_session.query_json(prompt) claims = await claude_session.query_json(prompt, tools="") # no tool_use → no error_max_turns
except Exception as e: except Exception as e:
last_err = e last_err = e
logger.warning( logger.warning(

View File

@@ -88,6 +88,7 @@ async def classify_treatment(cited_citation: str, context: str) -> str:
user, system=_TREATMENT_PROMPT, user, system=_TREATMENT_PROMPT,
model=config.HALACHA_EXTRACT_MODEL or None, model=config.HALACHA_EXTRACT_MODEL or None,
effort=config.HALACHA_EXTRACT_EFFORT or None, effort=config.HALACHA_EXTRACT_EFFORT or None,
tools="", # pure text→JSON — no tool_use → no error_max_turns
) )
except Exception as e: except Exception as e:
logger.warning("classify_treatment failed: %s", e) logger.warning("classify_treatment failed: %s", e)

View File

@@ -309,6 +309,7 @@ async def _nli_check(items: list[dict]) -> list[str]:
system=halacha_quality.NLI_SYSTEM, system=halacha_quality.NLI_SYSTEM,
model=config.HALACHA_NLI_MODEL or None, model=config.HALACHA_NLI_MODEL or None,
effort=config.HALACHA_NLI_EFFORT or None, effort=config.HALACHA_NLI_EFFORT or None,
tools="", # pure text→JSON — no tool_use → no error_max_turns
) )
except Exception as e: except Exception as e:
logger.warning("halacha NLI check failed (fail-open, no flags): %s", e) logger.warning("halacha NLI check failed (fail-open, no flags): %s", e)
@@ -352,6 +353,7 @@ async def _consolidate_precedent(case_law_id: UUID) -> int:
system=halacha_quality.CONSOLIDATE_SYSTEM, system=halacha_quality.CONSOLIDATE_SYSTEM,
model=config.HALACHA_CONSOLIDATE_MODEL or None, model=config.HALACHA_CONSOLIDATE_MODEL or None,
effort=config.HALACHA_CONSOLIDATE_EFFORT or None, effort=config.HALACHA_CONSOLIDATE_EFFORT or None,
tools="", # pure text→JSON — no tool_use → no error_max_turns
) )
groups = halacha_quality.parse_fold_groups(raw) groups = halacha_quality.parse_fold_groups(raw)
if not groups: if not groups:
@@ -423,6 +425,7 @@ async def _extract_chunk(
system=base_prompt, system=base_prompt,
model=config.HALACHA_EXTRACT_MODEL or None, model=config.HALACHA_EXTRACT_MODEL or None,
effort=(effort or config.HALACHA_EXTRACT_EFFORT) or None, effort=(effort or config.HALACHA_EXTRACT_EFFORT) or None,
tools="", # pure text→JSON — no tool_use → no error_max_turns
) )
except Exception as e: except Exception as e:
last_err = e last_err = e

View File

@@ -89,7 +89,7 @@ async def analyze_changes(draft_text: str, final_text: str) -> dict:
--- גרסה סופית --- --- גרסה סופית ---
{final_sample} {final_sample}
""" """
result = await claude_session.query_json(prompt) result = await claude_session.query_json(prompt, tools="") # no tool_use → no error_max_turns
if result is None: if result is None:
logger.warning("Failed to parse lessons response") logger.warning("Failed to parse lessons response")
return {"changes": [], "new_expressions": [], "overall_assessment": ""} return {"changes": [], "new_expressions": [], "overall_assessment": ""}

View File

@@ -154,7 +154,7 @@ async def check_claims_coverage(blocks: list[dict], claims: list[dict], outcome:
## בלוק הדיון: ## בלוק הדיון:
{discussion}""" {discussion}"""
parsed = await claude_session.query_json(prompt) parsed = await claude_session.query_json(prompt, tools="") # no tool_use → no error_max_turns
if parsed is None: if parsed is None:
logger.warning("Failed to parse claims check") logger.warning("Failed to parse claims check")
# Fallback: assume all covered (don't block export on parse failure) # Fallback: assume all covered (don't block export on parse failure)

View File

@@ -119,7 +119,7 @@ async def extract_decision_metadata(corpus_id: UUID | str) -> dict:
) )
try: try:
result = await claude_session.query_json(user_msg, system=METADATA_PROMPT) result = await claude_session.query_json(user_msg, system=METADATA_PROMPT, tools="") # no tool_use → no error_max_turns
except Exception as e: except Exception as e:
logger.warning("style_metadata_extractor: query failed: %s", e) logger.warning("style_metadata_extractor: query failed: %s", e)
return {} return {}