Files
kb-app/bulk_ingest.py
2026-05-10 23:07:43 +00:00

40 lines
1.4 KiB
Python

#!/usr/bin/env python3
"""Parallel ingestion of a directory."""
from concurrent.futures import ThreadPoolExecutor, as_completed
from pathlib import Path
import sys
sys.path.insert(0, '/home/julianocarlson/kb')
from app.ingest import ingest_file
from app.parsers import PARSERS
def main(root_path, max_workers=4):
root = Path(root_path)
files = [p for p in root.rglob("*")
if p.is_file() and p.suffix.lower() in PARSERS]
print(f"Found {len(files)} files to process")
counts = {"indexed": 0, "unchanged": 0, "error": 0, "skipped": 0, "empty": 0}
with ThreadPoolExecutor(max_workers=max_workers) as executor:
futures = {executor.submit(ingest_file, f): f for f in files}
for i, future in enumerate(as_completed(futures), 1):
try:
result = future.result()
status = result.get("status", "unknown")
counts[status] = counts.get(status, 0) + 1
print(f"[{i}/{len(files)}] {status}: {Path(result['path']).name}")
except Exception as e:
counts["error"] += 1
print(f"[{i}/{len(files)}] EXCEPTION: {e}")
print("\nSummary:")
for k, v in counts.items():
print(f" {k}: {v}")
if __name__ == "__main__":
path = sys.argv[1] if len(sys.argv) > 1 else "/mnt/nas/transcripts"
workers = int(sys.argv[2]) if len(sys.argv) > 2 else 4
main(path, workers)