"""CLI: ingest course material. python -m scripts.ingest --course imm1033 --site ../content/imm1033/dist # generated website python -m scripts.ingest --course imm1033 --path ../content/imm1033/ # pdf/docx/pptx/md """ from __future__ import annotations import argparse import asyncio from pathlib import Path from app.db import init_db from app.rag import retriever from app.rag.ingest import ingest_file, ingest_site async def main() -> None: ap = argparse.ArgumentParser() ap.add_argument("--course", required=True) ap.add_argument("--site", help="dist/ directory of the generated course website") ap.add_argument("--path", help="directory of pdf/docx/pptx/md files") ap.add_argument("--visibility", default="students", choices=["students", "professor_only"]) args = ap.parse_args() await init_db() total = 0 if args.site: total += await ingest_site(args.course, Path(args.site), args.visibility) if args.path: for p in sorted(Path(args.path).rglob("*")): if p.suffix.lower() in {".pdf", ".docx", ".pptx", ".md", ".txt"} and p.is_file(): n = await ingest_file(args.course, p, args.visibility) print(f" {p.name}: {n} chunks") total += n n = await retriever.rebuild_index() print(f"Ingested {total} chunks; index now holds {n} chunks.") if __name__ == "__main__": asyncio.run(main())