refactor(memory): own solved-question lifecycle (#24)
This commit is contained in:
@@ -578,10 +578,11 @@ def finalize_cmd(session_id: str = typer.Argument(...), config: Path = CONFIG_OP
|
||||
|
||||
# --- batteria di validazione su sql_final.sql ---
|
||||
assert sql is not None
|
||||
promoted_tables = promoted_tables_for(cfg, session_id)
|
||||
check = validate_sql(
|
||||
sql,
|
||||
physical=_load_physical_or_exit(cfg),
|
||||
promoted_tables=promoted_tables_for(cfg, session_id),
|
||||
promoted_tables=promoted_tables,
|
||||
forbidden_functions=set(cfg.execution.forbidden_functions),
|
||||
)
|
||||
if not check.ok:
|
||||
@@ -623,14 +624,29 @@ def finalize_cmd(session_id: str = typer.Argument(...), config: Path = CONFIG_OP
|
||||
repository, session_id, validation_report=report, evidence=evidence
|
||||
)
|
||||
# --- memoria attiva (parte B): indicizza la coppia domanda->SQL, best-effort ---
|
||||
# Import lazy: memory_cmd importa da session_cmd (un import top-level qui sarebbe
|
||||
# circolare). Qualunque errore (writer key assente, VPN giu', Ollama spento) NON
|
||||
# deve bloccare il finalize: l'indice e' derivato e recuperabile con
|
||||
# `tht memory solved-index <id>`.
|
||||
# Qualunque errore (writer key assente, VPN giu', Ollama spento) NON deve
|
||||
# bloccare il finalize: l'indice e' derivato e recuperabile con
|
||||
# `tht memory solved-index <id>`. Memory owns this best-effort policy; core
|
||||
# has already committed the authoritative finalized snapshot above.
|
||||
try:
|
||||
from tht.cli.memory_cmd import index_solved_session
|
||||
from tht.adapters.factory import build_vector_store
|
||||
from tht.cli.vector_cmd import make_embedder
|
||||
from tht.memory import index_solved_question_best_effort
|
||||
|
||||
if index_solved_session(cfg, session_id):
|
||||
finalized_snapshot = repository.get(session_id)
|
||||
outcome = index_solved_question_best_effort(
|
||||
finalized_snapshot,
|
||||
promoted_tables,
|
||||
store_factory=lambda: build_vector_store(cfg, require_write=True),
|
||||
embedder_factory=lambda: make_embedder(cfg.embeddings),
|
||||
)
|
||||
if outcome.error is not None:
|
||||
typer.secho(
|
||||
f"ATTENZIONE: coppia domanda->SQL non indicizzata ({outcome.error}). "
|
||||
f"Recupera con `tht memory solved-index {session_id}`.",
|
||||
fg=typer.colors.YELLOW, err=True,
|
||||
)
|
||||
elif outcome.upserted:
|
||||
typer.secho(
|
||||
"OK: coppia domanda->SQL indicizzata nel vectordb (solved_question).",
|
||||
fg=typer.colors.GREEN,
|
||||
|
||||
Reference in New Issue
Block a user