Conclave Docs

Knowledge graph & search

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

Conclave doesn't just store transcripts — it 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. All of this is 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.

Source: FEATURE-SPEC.md §2.4 & §6, conclave-graph-synthesis/, ENTITY-CANON.md.

On this page