const steps = [ { title: "Chunk & Embed", detail: "Uploads land in Celery ingestion workers, chunked to 800 chars with 100 overlap, and embedded via MiniLM or hash fallback.", }, { title: "Supabase / pgvector", detail: "Chunks upsert into tenant-scoped tables with metadata, ready for RAG MCP retrieval.", }, { title: "Quality Tasks", detail: "Nightly analytics + RAG precision@k jobs run through Celery beat (`scheduler.py`).", }, ]; export function IngestionCard() { return (

Knowledge Ops

Ingestion pipeline

Drop PDFs, DOCX, MD, or direct raw text and let Celery handle the rest. Every step mirrors the backend implementation in `backend/workers/ingestion_worker.py`, so what you see locally is what ships to production.

Celery broker / beat ready
    {steps.map((step, idx) => (
  1. Step {idx + 1}

    {step.title}

    {step.detail}

  2. ))}
); }