sinal-de-alerta / ingest.py
fabianonbfilho's picture
Upload ingest.py with huggingface_hub
8bb50f2 verified
Raw
History Blame Contribute Delete
1.98 kB
#!/usr/bin/env python3
"""
Pipeline de ingestão: lê PDFs de docs/ e indexa no ChromaDB.
Uso:
python ingest.py # indexa (pula se já indexado)
python ingest.py --rebuild # apaga e re-indexa tudo
"""
import sys
import time
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent))
from src.labdaps.config import DOCS_DIR
from src.labdaps.ingestion.pdf_extractor import extract_all_pdfs
from src.labdaps.ingestion.chunker import chunk_pages
from src.labdaps.ingestion.embedder import Embedder
from src.labdaps.retrieval.vector_store import build_index, collection_count
def main():
rebuild = "--rebuild" in sys.argv
print("=" * 60)
print(" LABDAPS RAG -- Ingestão do Livro Sinal de Alerta")
print("=" * 60)
if not rebuild:
count = collection_count()
if count > 0:
print(f"[INFO] Coleção já contém {count} chunks. Pulando ingestão.")
print("[INFO] Use --rebuild para forçar re-indexação.")
return
if not DOCS_DIR.exists():
print(f"[ERROR] Pasta de documentos não encontrada: {DOCS_DIR}")
sys.exit(1)
pdf_files = list(DOCS_DIR.glob("*.pdf"))
print(f"[INFO] Encontrados {len(pdf_files)} PDF(s) em {DOCS_DIR}")
print("\n[1/3] Extraindo texto dos PDFs...")
t0 = time.time()
pages = extract_all_pdfs(DOCS_DIR)
print(f"[INFO] {len(pages)} páginas extraídas em {time.time()-t0:.1f}s")
print("\n[2/3] Dividindo em chunks...")
t0 = time.time()
chunks = chunk_pages(pages)
print(f"[INFO] {len(chunks)} chunks gerados em {time.time()-t0:.1f}s")
print("\n[3/3] Gerando embeddings e indexando no ChromaDB...")
embedder = Embedder()
t0 = time.time()
build_index(chunks, embedder, rebuild=rebuild)
print(f"[INFO] Indexação concluída em {time.time()-t0:.1f}s")
print(f"\n[OK] Ingestão concluída! Total de chunks: {collection_count()}")
if __name__ == "__main__":
main()