Ingest · retrieve
Knowledge assistant
Cite-or-refuse retrieval
Three deployables: a document ingest pipeline into vector search, an orchestrator API, and a chat client. Answers are generated from indexed chunks, not from a naked prompt.
- Python
- FastAPI
- Azure Functions
- AI Search
- TypeScript
INGEST
Blob events, PDF / DOCX / Excel
INDEX
Chunk + 3072-d embeddings + HNSW
API
Orchestrator with key auth
CLIENT
Chat surface over the same corpus
01The problem
A chat surface over PDFs that does not ingest, chunk, or cite is a wrapper. Teams also tend to host the orchestrator, the ingest workers, and the bot as one process, then discover blob deletes never drop index rows.
02What we designed
Three deployables:
- Ingest — Azure Functions (ASGI FastAPI) plus blob and Event Grid triggers. Files land in object storage, become layout-aware chunks, embeddings, and search documents.
- Orchestrator — FastAPI on Functions. Retrieval, generation, traces. The chat client is not the brain.
- Chat client — TypeScript bot / web surface that calls
/orchestratorwith an API key.
Answers are generated from hits. Empty retrieval refuses.
03What I owned
The ingest architecture (factory of processors, index schema, upload and delete flows), batch embeddings, and the split between HTTP ingest and event-driven cleanup.