step-9: add dynamic epilog and improve argparse help text

- description spiega scopo e prerequisiti
- help di --stem rimosso riferimento al documento specifico
- epilog mostra sintassi del loop interattivo
- epilog lista le collection ChromaDB disponibili a runtime
This commit is contained in:
2026-04-14 16:25:23 +02:00
parent 1a0ebafda5
commit 80bd563000
+40 -3
View File
@@ -180,10 +180,47 @@ def run_loop(collection: chromadb.Collection) -> None:
# ─── Entry point ──────────────────────────────────────────────────────────────
def _build_epilog() -> str:
lines = [
"Uso:",
" python step-9/rag.py --stem <nome>",
"",
"Loop interattivo:",
" <domanda> risposta basata sul documento",
" <domanda> -v risposta + chunk recuperati con score di similarità",
" exit termina",
]
if CHROMA_DIR.exists():
try:
client = chromadb.PersistentClient(path=str(CHROMA_DIR))
names = [c.name for c in client.list_collections()]
if names:
lines += ["", f"Collection disponibili: {', '.join(names)}"]
else:
lines += ["", "Nessuna collection trovata — eseguire prima: python step-8/ingest.py"]
except Exception:
pass
return "\n".join(lines)
def main() -> int:
parser = argparse.ArgumentParser(description="Step 9 — Pipeline RAG interattiva")
parser.add_argument("--stem", required=True,
help="Nome della collection ChromaDB (es. nietzsche)")
parser = argparse.ArgumentParser(
description=(
"Step 9 — Pipeline RAG interattiva\n\n"
"Risponde a domande in linguaggio naturale su un documento\n"
"indicizzato in ChromaDB da step-8/ingest.py."
),
epilog=_build_epilog(),
formatter_class=argparse.RawDescriptionHelpFormatter,
)
parser.add_argument(
"--stem",
required=True,
help=(
"Nome della collection ChromaDB da interrogare. "
"Le collection vengono create da: python step-8/ingest.py --stem <nome>"
),
)
args = parser.parse_args()
print("─── Step 9 — Pipeline RAG ────────────────────────────────────────────\n")