Conclave Docs

Knowledge graph & search

Bi-temporal entities, hybrid BM25 + embedding retrieval, and Ask (RAG).

Conclave builds a knowledge base across meetings, so you can ask a question and get a cited answer pulled from everything, not just the last call. It's all built at ingest; the read path stays operator-blind.

What gets extracted

  • Entities — per-chunk LLM extraction of people, technologies, and affiliations (derived types), stored bi-temporally (valid_to / superseded_by) so the graph has history.
  • Entity resolution — lexical-first, definition-driven merge (tuned to avoid "black-hole" over-merges).
  • Obligations & facts — structured action items and facts, also bi-temporal.
  • Chunking — turn-aware (never splits mid-turn) with context headers, plus FTS5 + embeddings.

Retrieval runs two lanes and fuses them:

  • FTS5 BM25 (lexical) ∥ local nomic embeddings (768-d, 256-d Matryoshka ANN via sqlite-vec).
  • Fused with Reciprocal Rank Fusion (RRF), then visibility-filtered.

It's pure SQL + local embeddings — no model call, no egress. That's what makes search operator-blind. Surfaced at POST /search.

Ask (RAG) — the only read-path LLM call

POST /ask synthesizes an answer from retrieved contexts and is the single deliberate exception to "no LLM on reads." Every answer is cited (quote, speaker, meeting). It's optional (returns 404 when disabled) and runs inside the TEE.

Cited or it didn't happen. Ask never free-associates — it answers from retrieved, visibility-scoped context and shows its sources, so an answer can always be traced back to the meeting it came from.

The graph, per-entity pages, obligations, and open-questions rollups are all browsable in the app.

Regulated data never lands here. When verifiable redaction strips PCI / PHI / PII from a transcript, insights are re-derived from the redacted text — so the knowledge base is built from the clean version, and the stripped data never enters the graph, the embeddings, or search.

On this page