Context. MemGraphRAG's core retrieval contribution is Personalized PageRank over a heterogeneous graph with structure-aware seeding (v^(k+1) = (1-λ)Wv^(k) + λv^(0), λ=0.5). The Reranker Protocol + stargraph.rerankers entry point is the clean drop-in seat. This issue adds the PPRReranker; activating the graph-retrieval branch itself is tracked in #116 (promote GraphStore.expand() into RetrievalNode) — this depends on #116, it does not re-file it.
Proposal. New PPRReranker implementing the Reranker Protocol.
fuse(): treat per-store hits as the personalization vector v^(0); pull neighbourhoods via GraphStore.expand(seed, hops) (hops≤10 cap at ryugraph.py:230); build a sparse adjacency W from returned GraphPath edges; run ~10 power iterations at λ=0.5; return top-k.
- Fall back to RRF when no graph candidates resolve (mirrors the paper's RAG fallback).
- Implement PPR in Python — portable Cypher can't express graph algorithms (
cypher.py rejects CALL{} :235-252).
Where.
Acceptance criteria.
Perf caveat. Building W in Python from repeated expand() is O(seeds × neighbourhood) — opposite of the paper's 0.061s claim (which assumes a pre-built in-memory adjacency). May need a RyuGraph provider-extension to export a CSR adjacency once (cf. bulk_copy). Most faithful once the tri-view schema (linked issue) exists.
Source: arXiv:2606.00610v1 — "MemGraphRAG: Memory-based Multi-Agent System for Graph Retrieval-Augmented Generation". Distilled from arXiv-research/2606.00610v1/analysis.md; file refs verified against current main by the analysis pass.
Context. MemGraphRAG's core retrieval contribution is Personalized PageRank over a heterogeneous graph with structure-aware seeding (
v^(k+1) = (1-λ)Wv^(k) + λv^(0), λ=0.5). The Reranker Protocol +stargraph.rerankersentry point is the clean drop-in seat. This issue adds the PPRReranker; activating the graph-retrieval branch itself is tracked in #116 (promoteGraphStore.expand()into RetrievalNode) — this depends on #116, it does not re-file it.Proposal. New
PPRRerankerimplementing the Reranker Protocol.fuse(): treat per-store hits as the personalization vectorv^(0); pull neighbourhoods viaGraphStore.expand(seed, hops)(hops≤10 cap atryugraph.py:230); build a sparse adjacencyWfrom returnedGraphPathedges; run ~10 power iterations at λ=0.5; return top-k.cypher.pyrejectsCALL{}:235-252).Where.
src/stargraph/stores/rerankers.py— newPPRReranker(Protocol :48-67).[project.entry-points."stargraph.rerankers"]pyproject.toml:141(currently only 'cross-encoder').RetrievalNode._dispatch(retrieval.py:153-174).Acceptance criteria.
PPRRerankerruns power iteration over an adjacency built fromexpand()paths; returns top-k.RRFReranker's permutation-invariance guarantee (rerankers.py:92-103).Perf caveat. Building
Win Python from repeatedexpand()is O(seeds × neighbourhood) — opposite of the paper's 0.061s claim (which assumes a pre-built in-memory adjacency). May need a RyuGraph provider-extension to export a CSR adjacency once (cf.bulk_copy). Most faithful once the tri-view schema (linked issue) exists.Source: arXiv:2606.00610v1 — "MemGraphRAG: Memory-based Multi-Agent System for Graph Retrieval-Augmented Generation". Distilled from
arXiv-research/2606.00610v1/analysis.md; file refs verified against currentmainby the analysis pass.