(WIP) Optional explain payload for GraphRAG.search#544
Draft
zeljkoagic wants to merge 21 commits into
Draft
Conversation
explain payload for GraphRAG.search
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
What
Adds optional explainability to
GraphRAG.search(): structured provenance with numbered sources, graph paths, and a minimal trace (retriever name + generated Cypher for Text2Cypher).generation/explain.py, incl. models, builders, Neo4j path serialization,text2cypher_explain_result_formatter/vector_cypher_explain_result_formatterGraphRAG.search(..., explain=ExplainConfig())numbers context[1],[2], optional inline citations, attachesresult.explainexamples/question_answering/graphrag_with_explain.py(Text2Cypher + VectorCypher, table/JSON output)Why
Graph RAG answers are hard to trust without provenance. This PoC shows what was retrieved, which graph paths supported it, and how it was fetched — without re-querying after generation.
How
result_formatterputsGraphContext(paths=…)on each item’smetadata["graph"](plus result-levelmetadata["cypher"]for Text2Cypher).explainis set,GraphRAGforcesreturn_context=True, numbers items for the LLM, and projects the sameRetrieverResultintoExplainResultviabuild_explain_result().GraphContextis paths-only, no flat seed/related-node fields, no dict round-trip in the library.Type of Change
Complexity
Complexity: Medium
How Has This Been Tested?
Example CLI included in PR for manual testing.
Checklist
The following requirements should have been met (depending on the changes in the branch):