Everyone building GraphRAG tunes the same three dials: the retriever, the chunk size, the re-ranker. Then the retrieved subgraph gets serialized into the prompt with json.dumps() — and nobody measures what that step costs.
I did. It costs more than everything else you tuned.
The benchmark
I compared 10 graph serialization formats — JSON, GraphML, RDF variants, edge lists, and others — on three axes:
Token count for the same property graph






