Skip to main content

mnem_graphrag/
lib.rs

1//! LLM-free `GraphRAG` primitives over mnem's [`AdjacencyIndex`].
2//!
3//! This crate fuses two experiments onto one substrate:
4//!
5//! - **E1 (Leiden)** - [`community`] provides modularity-optimising
6//!   community detection producing a deterministic, content-addressable
7//!   [`CommunityAssignment`] from any `AdjacencyIndex` (authored, KNN,
8//!   or hybrid).
9//! - **E4 (Summarize)** - [`summarize`] provides an extractive
10//!   Centroid+MMR summarizer over community members, reusing
11//!   [`mnem_embed_providers::Embedder`].
12//! - **Gap 16 (Calibration)** - [`calibration`] emits scale-free
13//!   per-query score quantiles and a categorical distribution-shape
14//!   label so agents can interpret dense-retrieval scores without a
15//!   trained cross-embedder scaler.
16//!
17//! # Non-goals
18//!
19//! - No LLM: summarization is *extractive*, returning existing sentences.
20//! - No BM25 .
21//! - No network, no heavy deps beyond mnem-core / mnem-embed-providers.
22//!
23//! # Determinism
24//!
25//! Every public entry point in this crate is seeded. Given the same
26//! input and seed, two independent runs produce byte-identical output.
27//!
28//! [`AdjacencyIndex`]: mnem_core::index::AdjacencyIndex
29
30#![forbid(unsafe_code)]
31#![deny(missing_docs)]
32
33pub mod calibration;
34pub mod community;
35pub mod confidence;
36pub mod summarize;
37
38pub use calibration::{
39    K_MIN, ScoreDistribution, ShapeLabel, WILSON_WIDTH_TARGET, WILSON_Z, derive_k_min,
40    distribution_shape, node_score_quantiles, score_quantiles,
41};
42pub use community::{CommunityAssignment, CommunityId, compute_communities};
43pub use confidence::{
44    K_MIN_SHAPE_GATE, RankAgreement, median_topk_margin_pct, normalized_entropy, rank_agreement,
45};
46pub use summarize::{Summary, SummaryItem, summarize_community};