feat(cli): tht memory solved-index / solved-search (question->SQL exemplars)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-07 13:43:52 +02:00
co-authored by Claude Fable 5
parent c0324c127a
commit 1f429b6b35
3 changed files with 186 additions and 0 deletions
+25
View File
@@ -62,3 +62,28 @@ def save_solved_question(record: VectorRecord, *, writer, embedder) -> int:
"metadata": pack_metadata(record),
"embedding": embedding,
}])
class SolvedIndexError(Exception):
"""La sessione non ha (ancora) gli artefatti per il record solved_question."""
def build_solved_record(session_dir, manifest, promoted_tables) -> VectorRecord:
"""Costruisce il record dagli artefatti persistiti (vista effective D15):
richiede sql_final.sql e la decisione sql_approved; la domanda e' l'ultima
question_rewritten, fallback la domanda del manifest."""
from tht.memory import question_context
from tht.phase import effective_decisions
sql_file = session_dir / "sql_final.sql"
if not sql_file.exists():
raise SolvedIndexError("sql_final.sql assente")
decisions = effective_decisions(session_dir)
if not any(d.type == "sql_approved" for d in decisions):
raise SolvedIndexError("decisione sql_approved assente")
return solved_question_record(
session_id=manifest.id,
question=question_context(decisions, manifest),
sql=sql_file.read_text().strip(),
tables=sorted(promoted_tables or set()),
)