diff --git a/step-9/rag.py b/step-9/rag.py index b4617f0..ffd0402 100644 --- a/step-9/rag.py +++ b/step-9/rag.py @@ -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 ", + "", + "Loop interattivo:", + " risposta basata sul documento", + " -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 " + ), + ) args = parser.parse_args() print("─── Step 9 — Pipeline RAG ────────────────────────────────────────────\n")