"""Knowledge ingestion — the async batch that turns a user's uploaded documents into knowledge artifacts (KNOWLEDGE_SURFACE_PLAN.md §3.5, tasks N10–N10f). One click, N documents: `POST /api/v1/knowledge/ingest` selects the caller's parseable `documents` rows, runs parse → filter → cluster → estimate → extract over each, and persists the results. The request never waits on it — the route returns `202 {job_id}` and the caller polls `GET /api/v1/knowledge/jobs/{id}`. Distinct from `src/knowledge/` (the Tesseract → pgvector RAG path, untouched) and from `src/knowledge_parsing/` + `src/knowledge_extraction/` (the pipeline itself, which this package only orchestrates — it owns no extraction logic). """ from src.knowledge_ingest.models import DocumentResult, IngestJob, JobStage, JobStatus from src.knowledge_ingest.store import InMemoryJobStore, JobStore, PostgresJobStore __all__ = [ "DocumentResult", "IngestJob", "JobStage", "JobStatus", "JobStore", "InMemoryJobStore", "PostgresJobStore", ]