A measured, all-real comparison of the AITruthX framework against Microsoft GraphRAG across three language models (Test 1) — and against every major RAG family, fourteen configurations from cross-encoder reranking to RAPTOR (Test 2) — showing where hallucinations actually come from. Test 4 takes the same question to a 215-page corpus, where retrieval sees only 2.5% of the document, and Test 4.2 cuts what the user is shown by 59% without losing a single answer.
We asked one hard question of a fixed body of source text, and answered it ten different ways — the AITruthX framework, and three flavours of Microsoft GraphRAG, each driven by three different large language models. Every answer below is a real, live output from the actual engine. Then a neutral judge counted, for each one, exactly how many claims were not supported by the source. This note reports what happened and what it means for anyone who needs data they can trust.
The bottleneck is retrieval, not the model. AITruthX — running the cheapest model — answered with zero hallucinations at a fraction of the cost. Upgrading the language model (all the way to Claude Fable 5) did not rescue the weaker retrieval methods. And when we gave every method the same rich context, the strongest model was the most disciplined, not the most inventive.
Test 2 (recorded 20–21 Jul) stress-tested that result against every other major RAG family — cross-encoder reranking, parent-document, hybrid BM25+dense, HyDE, multi-query, an agentic LangGraph loop, and RAPTOR: fourteen configurations, three models, two judges, everything generated and judged twice. AITruthX remained the only clean row on the board — and a claim-by-claim audit showed why: what a chunk leaves out, the model invents.
Two independent judges (Google Gemini 2.5 Flash + Claude Fable 5) each read the full source data, then score every answer three ways:
① Flags (hallucinations) — each claim in the answer is checked for its connection and its backing sentence in the data. Lenient counts only clear inventions; strict counts any claim without an explicit backing sentence.
② Grounding = 1 − (flagged claims ÷ total claims) — the fraction of the answer the source actually supports.
③ Coverage = the data's own stored fact-points for the asked topic, each marked covered / partial / missed — not written by any judge, chosen by the data itself.
The guarantee: those coverage fact-points were themselves verified against the full uploaded source by both judges — Gemini confirmed 33/35, Fable 32/35 (the two either reject are clarifying definitions true but not written verbatim in the upload). So the checklist isn't ours to assert — it's the data, independently confirmed. And this exact protocol was applied identically to every engine, AITruthX and every RAG baseline alike.
AITruthX uses a language model for one job only: putting what the framework already found into clear, correct language — the wording and the grammar. The model does not search, and it does not decide what the answer is. That work is done by the framework itself, over approved source material. Because the model is only writing, it can be a cheap, open-source-class base model instead of an expensive frontier one.
A cheap, open-source base model turns the passage the framework retrieved into fluent language. It never searches, never reasons about what is true, and never chooses the answer — so it has no opening to invent one.
The language model is asked to search, reason over whatever it pulled back, judge what matters, and write. Accuracy therefore rises and falls with the model — which is why the usual fix is a bigger, costlier one.
That difference is the whole subject of this study, and it is why AITruthX can run on the cheapest model in the comparison and still be the only engine to reach perfect grounding: correctness comes from the retrieval, not from the model's judgement.
We're building AITruthX into a platform where anyone can upload their own data and get grounded, LLM-quality answers from it — at the cost of the cheapest model, with output quality rivaling the most expensive.
Upload your raw data and query it like an LLM.
Plug AITruthX into your own apps and workflows.
Unlike today's walled-off ecosystems, use your own grounded data to train models, on your terms.
A first-of-its-kind space where the community can review and validate performance results openly.
The rest of this note is the evidence behind that claim — the experiment, the numbers, and every answer and flagged claim in full.
Tests 1–3 ran on a small corpus, where top-k retrieval sees a large share of the document. That is the friendliest possible setting for chunk retrieval, and we said so. Test 4 removes that advantage: a 646,000-character document — ~215 pages, 1,126 interlinked records — where top-20 chunks are ~2.5% of the corpus and the answers are deliberately spread across the whole document, the way real enterprise knowledge is. One preparation is used by 149 different menu items. One chemical constituent reaches 29 preparations only through multi-step chains. Every answer is scored against ground truth computed programmatically from the document — no human judgment, no model judgment.
The corpus is a structured food-science document: menu items built from preparations, preparations built from ingredients, ingredients carrying chemical constituents. It was chosen because the dependency chains are real, deep and mechanically checkable — we can compute the correct answer from the source and compare, rather than asking a model to grade prose.
| # | Question (truth) | Standard RAG vectors, keywords, hybrid — best shown |
AITruthX — DEPTH answer instant, complete, no AI involved |
AITruthX — COMPACT answer short summary by an external model, reading only the depth answer |
|---|---|---|---|---|
| Q1 | every menu using preparation X (149) | 12–25 / 149 time 12.6s · read 4,907 tokens form: fragment |
149 / 149 — full depth typing at 5.1s shown: 88,150 chars of verified records 13.6% of the document |
same 149 covered input 88,150 chars ≈ 22,000 tokens |
| Q2 | what ultimately contains constituent Y (29, multi-step) | 0 / 29 time ~12–15s · read ~4,900 tokens |
29 / 29 — full depth typing at 2.7s shown: 24,415 chars, chains included 3.8% of the document |
same 29 input ≈ 6,100 tokens |
| Q3 | every menu using preparation Z (60) | — | 60 / 60 — full depth typing at 3.5s shown: 64,632 chars 10.0% of the document |
same 60 input ≈ 16,200 tokens |
| Q4 | multi-step, constituent C (19) | — | 19 / 19 — full depth typing at 2.7s shown: 12,925 chars 2.0% of the document |
same 19 input ≈ 3,200 tokens |
| Q5 | all formulas in a four-level chain (39) | 0 formulas time ~12–15s · read ~4,900 tokens |
all 39 + 7 beyond the truth set typing at 2.7s shown: 176,674 chars, deepest level included 27.3% of the document |
organized short answer input ≈ 44,200 tokens |
| 🚫 | Hallucination | generated from 3% of the document — grounding tests found 3 invented facts | impossible — nothing is generated. Presents 100% of the answer's linked records — 12,925 to 176,674 characters of stored, source-verified text per answer, i.e. 2.0% to 27.3% of the 646,000-character document (366,796 characters · 56.8% of the document served across these five questions), every line traceable to the source | 0 inventions · grounding 1.000 — the model reads 100% of the depth answer and nothing else |
This is the cleanest statement of what the framework is and is not. The answer is complete before any AI is involved, with each chemical formula already attached to the item it belongs to. A basic language model is then used for one job — compacting that complete answer into flowing prose someone wants to read — and that step is where the 60–110 seconds and the entire token bill are spent. It is also where completeness can be lost rather than gained.
For anyone who needs the full result rather than a readable summary — an auditor, a compliance review, a regulatory filing — the zero-AI answer is the one to take, and it is free.
The zero on Q2 is not a tuning failure, and no amount of top-k widening or reranking repairs it. The passages about a chemical constituent never mention the preparations three links away. Similarity search — by meaning, by keywords, or both fused — can only retrieve text that exists; it cannot retrieve a relationship that was never written down in any single place. The relationship has to be established before the question is ever asked.
That is the difference this test isolates. AITruthX resolves the relationships once, during ingestion, and every answer is then assembled from those established, individually-checkable connections. Chunk retrieval has no equivalent step: it meets the question with nothing but text similarity, and a fact that spans documents has no similarity to find.
This is the same architectural point Tests 1–3 made about grounding, now visible as a hard zero rather than a score difference.
Excerpts, unedited, from the AITruthX answers:
“The Warm Spice Blend is used in the following menu items: Hollowmere Courtyard 6613 is a menu item of the Vietnamese line composed of Green Chilli Base, Warm Spice Blend, and Preserved Rind Base… Cobalt Pavilion 9649 is a menu item of the Russian line constructed with Aromatic Oil Base, Warm Spice Blend, and Golden Spice Paste…” — continuing through all 149, each with its full composition.
“Several component preparations and standing preparations ultimately contain Piperine through their ingredients: Aromatic Bark Oil: this component preparation…” — each of the 29, with the chain that reaches it.
The document was ingested once — ~3 hours, fully automated, pausing and resuming itself through interruptions — producing 1,118 records joined by 3,291 byte-exact connections, every connection verifiable against the source text.
Two separate things happen, and only one of them costs time. AITruthX produces the complete, in-depth answer to the question — that part is the framework, and it is effectively instantaneous. A basic language model is then used for one job only: to compact that complete answer into readable prose for the person asking. The 60–110 seconds is the model writing, not the framework finding. We report it because the user waits for it, but it is a property of the external model, not of the retrieval.
That split also decides the bill. AITruthX itself is free inside the platform — what a user pays for is the external model that renders the answer. Choose a cheaper or faster model and the wait and the cost both fall; the completeness measured in Figure 8 does not change, because it was already determined before the model wrote a word.
We do not re-read the document to answer. The full corpus is ~165,000 tokens; a deep answer draws on ~65,000 of them — only the records the question actually reaches (~450 of 1,118 here). RAG read ~19,000 tokens, but the wrong selection. Brute-forcing all 165k through a model on every question is not merely expensive: our own ingestion campaign showed models cannot reliably enumerate at that size even with everything in front of them. The connections are established once, at ingestion; each question then reads only what it needs. These five were maximum-spread stress questions — an everyday question reaches far less.
Limits we state plainly. Single benchmark runs — unlike Tests 1–3, these were not repeated, so treat individual numbers as one observation each. Eight records with name-twin titles were excluded from every truth set, for AITruthX and RAG alike. Three retrieval families were tested here; proxy methods, HyDE, MMR, parent-document, RAPTOR and GraphRAG are follow-up work — in our earlier smaller-scale rounds proxy methods lost the chemical symbols and parent-document capped hard, but that is not yet measured at this scale. Raw answers are retained and available. A minute is a long time to wait — that wait is the external model writing the answer out, and shortening it is our next engineering target. We would rather publish the honest latency than hide it.
Test 4 established that the answers are complete. It also showed the price: the five questions served 366,796 characters of verified records between them, and everything a person is shown has to be read by the external model that compacts it. So we went back to the linking itself and made the connections more precise — fewer loosely-related records reached, more of exactly the ones the question needs. Test 4.2 re-ran the identical five questions against the sharpened links.
| Question | Test 4 · shown | Test 4.2 · shown | Change | Share of the document |
|---|---|---|---|---|
| Q1 — 149 menus | 88,150 chars | 74,204 chars | −15.8% | 13.6% → 11.5% |
| Q2 — Piperine, 29 | 24,415 chars | 16,326 chars | −33.1% | 3.8% → 2.5% |
| Q3 — 60 menus | 64,632 chars | 29,677 chars | −54.1% | 10.0% → 4.6% |
| Q4 — Curcumin, 19 | 12,925 chars | 16,326 chars | +26.3% | 2.0% → 2.5% |
| Q5 — 39 formulas | 176,674 chars | 14,290 chars | −91.9% | 27.3% → 2.2% |
| TOTAL | 366,796 chars ~3.7 lakh | 150,823 chars ~1.5 lakh | −58.9% | 56.8% → 23.3% |
Nothing was summarised, shortened or dropped to achieve this. No text was rewritten and no model was involved in the reduction. The answers contain the same verified records as before — there are simply fewer records that do not belong to the question, because the connections between records were made more exact.
That distinction matters for what it protects. Compression trades completeness for size, and a compressed answer can lose a fact. Precision does not: the reduction comes entirely from not reaching material the question never needed, so every figure in Test 4 still holds. Completeness is unchanged; only the irrelevance is gone.
It also decides the bill. Because the free depth answer is what the paid model reads, halving the characters roughly halves the cost of every compact answer — without touching what the answer says. This is the direction the work continues in: not a faster model, but fewer characters that were never worth reading.
Test 1 (below) showed a better model doesn't fix weak retrieval. Test 2 asks the harder question: does a better retriever fix it? Fourteen configurations across seven retrieval families — implemented to LangChain-standard formulas, including a real LangGraph agent and a RAPTOR summary tree — on the same corpus, the same broad question, and the same two judges as Test 1. Everything was generated and judged twice.
Reviewers of Test 1 rightly asked: Microsoft GraphRAG is one family — what about the standard fixes? Two in particular are the textbook rebuttals: cross-encoder reranking (precise top-k instead of noisy stuffing) and parent-document retrieval (resolve to a unit, return its bounded neighbourhood — structurally the closest rival to AITruthX). Test 2 runs both, plus every other major family:
Microsoft's open-source (MIT-licensed) graph-RAG library — entity/community retrieval, local search and global map-reduce (github.com/microsoft/graphrag). Fully benchmarked in Test 1 below across three models — and carried into Figure 1 so every family sits in one table.
In the wild: Microsoft's own Azure AI ecosystem; LinkedIn (a Microsoft company) has published a knowledge-graph RAG system for its customer support; Neo4j has built a whole GraphRAG ecosystem around the idea, and Writer's enterprise platform is knowledge-graph based.
Straight embedding search, top-3 chunks stuffed. The control.
In the wild: the default first stage almost everywhere — ChatGPT's file search and most vector-database stacks (Pinecone, Weaviate, pgvector); Spotify built and open-sourced its own vector-search engine (Voyager) for recommendations; Notion and Gong are documented vector-retrieval deployments (Pinecone case studies).
Dense top-10 re-scored by bge-reranker-base; top-1 and top-3 kept — plus three chunking regimes (overlap, no-overlap, heading-prefixed).
In the wild: Cohere sells reranking as a flagship product; Azure AI Search's semantic ranker and Amazon Bedrock knowledge bases offer cross-encoder-style reranking; OpenAI's file-search pipeline documents reranked retrieval; Oracle bundles Cohere's models across OCI under a publicly announced partnership.
Small chunks matched, whole parent section returned — with and without neighbourhood expansion.
In the wild: the standard “small-to-big” pattern in LangChain and LlamaIndex production guides; common in enterprise document QA, though specific deployments are rarely disclosed — notably, Amazon Bedrock ships it natively as “hierarchical chunking.”
Keyword and vector rankings fused (RRF), top-6 — the production default at most shops.
In the wild: the documented default at Elastic and Azure AI Search; Anthropic's own Contextual Retrieval recipe for Claude pairs BM25 with embeddings; Amazon Bedrock supports hybrid search out of the box; Weaviate and MongoDB Atlas ship hybrid natively.
Rewrite the query (3 variants, RRF-fused) or embed a hypothetical answer (HyDE), then retrieve.
In the wild: query rewriting/expansion is documented in OpenAI's file-search and Google Vertex AI Search pipelines; multi-query ships as a standard LangChain retriever; Perplexity's answer engine reportedly leans heavily on query reformulation.
A real CRAG-style graph built on LangGraph: retrieve → grade sufficiency → rewrite → retrieve again → answer.
In the wild: LangGraph publicly lists Uber, LinkedIn, Replit and Elastic among adopters; the retrieve-assess-retrieve pattern is approximately what powers the “deep research” modes in ChatGPT and Gemini; GitLab (Duo) and Klarna are further documented LangChain-stack adopters.
Chunks clustered and summarised into tree nodes; retrieval over chunks + summaries together (RAPTOR paper).
In the wild: a newer Stanford method shipping as LlamaIndex packs; we found no named production deployments yet — early-stage by any measure.
A fair criticism of grounding alone: a method could score 1.00 by returning one narrow sentence. Test 2 therefore adds coverage — each answer is scored against 35 frozen source facts (fixed before any run): how many does the answer actually convey? A clean-but-empty answer now shows up as exactly that. As the table shows, AITruthX's 1.00 grounding comes at 0.90 coverage — it says as much of the real material as the stuffing methods do.
Every AITruthX result on this page is the platform's in-depth mode — the one-click deep walk that reads across the whole topic. It is what reaches 1.00 grounding at 0.90 coverage. A quick normal reply is deliberately conservative on a broad question like this one: on a broad question like this one it gives a short answer and offers to go deeper, rather than attempting the whole thing at once. In-depth walks the entire topic and is what produces the grounded, complete answer scored in this table. For the most complete, correct answer, always use in-depth. Test 3 above takes this further: the Go deeper+ mode reaches full coverage — 1.00 — at zero hallucination on both judges.
| Engine — retrieval + model | Grounding | Flags · lenient* | Flags · strict* | Coverage | Calls |
|---|---|---|---|---|---|
| AITruthX in-depth mode · cheapest base modelin-depth mode (one click) — the deep walk that gives the most complete answer · aitruthx.com | 1.00 | 1 | 2–5 | 0.90 | 1 |
| AITruthX — Test 3 correction Go deeper+ · complete depth · recorded 22 Julsame engine, deeper mode — Test 3 below explains the correction of the 0.90 | 1.00 | 0 · 0 | 1 · 0 † | 1.00 · 1.00 | 1 |
| RAPTOR summary tree top-6used by: Stanford method · LlamaIndex packs | 0.94 | 0–4 | 19–29 | 0.94 | 1 (+5 build) |
| RAPTOR summary tree top-6 · Claude Opus 4.8 | 0.95 | 0–3 | 18–26 | 0.94 | 1 (+5 build) |
| RAPTOR summary tree top-6 · Claude Fable 5 | 0.79 | 0–18 | 25–58 | 0.94–0.96 | 1 (+5 build) |
| HyDE top-3used by: OpenAI file search · Google Vertex AI | 0.93 | 0–4 | 12–19 | 0.94 | 2 |
| HyDE top-3 · Claude Fable 5 | 0.84 | 0–16 | 34–47 | 0.93–0.97 | 2 |
| HyDE top-3 · Claude Opus 4.8 | 0.74 | 0–17 | 32–62 | 0.94–0.97 | 2 |
| Agentic loop LangGraph CRAGused by: Uber · LinkedIn · Replit · GitLab · Klarna (LangGraph) | 0.92 | 0–5 | 19–27 | 0.94 | 6 |
| Agentic loop LangGraph CRAG · Claude Fable 5 | 0.80 | 0–15 | 25–45 | 0.94 | 6 |
| Agentic loop LangGraph CRAG · Claude Opus 4.8 | 0.77 | 0–18 | 31–58 | 0.94 | 6 |
| Hybrid BM25+dense top-6used by: Elastic · Azure AI Search · Anthropic's Claude recipe · Amazon Bedrock · MongoDB Atlas | 0.85–0.90 | 0–8 | 15–26 | 0.94 | 1 |
| Hybrid BM25+dense top-6 · Claude Opus 4.8 | 0.78 | 0–20 | 37–53 | 0.93 | 1 |
| Hybrid BM25+dense top-6 · Claude Fable 5 | 0.78 | 0–18 | 29–47 | 0.93–0.94 | 1 |
| Rerank top-3 cross-encoderused by: Cohere · Azure semantic ranker · Amazon Bedrock · Oracle OCI | 0.85–0.92 | 0–14 | 16–32 | 0.81–0.87 | 1 |
| Dense top-3 controlused by: ChatGPT file search · Pinecone/Weaviate stacks · Spotify · Notion | 0.79–0.92 | 0–6 | 8–26 | 0.93–0.94 | 1 |
| Parent-doc + expansion used by: LangChain/LlamaIndex pattern · Amazon Bedrock “hierarchical chunking” | 0.78–0.85 | 0–15 | 12–28 | 0.93–0.94 | 1 |
| Rerank top-1 cross-encoderused by: Cohere · Azure · Amazon Bedrock · OpenAI pipeline | 0.83–0.87 | 0–12 | 23–63 | 0.86–0.90 | 1 |
| Rerank top-1 · headed chunks chunking-ablation variant of rerank | 0.81–0.83 | 0–19 | 15–53 | 0.89–0.97 | 1 |
| Rerank top-1 · no-overlap chunks chunking-ablation variant of rerank | 0.75–0.86 | 0–15 | 23–49 | 0.86–0.91 | 1 |
| Multi-query top-6used by: LangChain standard · Vertex AI · Perplexity (reported) | 0.81 | 0–10 | 14–25 | 0.94 | 2 |
| Parent-document used by: LangChain/LlamaIndex pattern · Amazon Bedrock | 0.83–0.84 | 0–15 | 26–55 | 0.79–0.83 | 1 |
| Microsoft GraphRAG local & global · all 3 modelsused by: Azure AI · LinkedIn · Neo4j · Writer | Fully benchmarked in Test 1 below: grounding 0.67 at best (local · Gemini 2.5 Flash, 1 call) down to ~0 for the global loop (7 calls) — across all three models. Strict-mode flags and coverage were not part of Test 1's protocol, so its numbers live in Figures 4–6 rather than these columns. | ||||
Grounding is the fraction of an answer's claims actually supported by the source (1.00 = nothing invented). Flags is the raw count of claims a judge marked unsupported — lenient counts only clear hallucinations, strict counts every claim not explicitly backed, however small. Coverage is completeness: how many of the 35 frozen source facts the answer conveys. Calls is the number of LLM calls the method needed. A single number means the judges agreed; a range is the min–max across judges, modes, and runs.
Step by step — how every score is produced: (1) Coverage points — chosen by the data, not by anyone. At ingestion, AITruthX breaks the uploaded source into individual factual statements and stores them. For a question, the checklist is exactly the stored statements of the topic being asked (35 for the Teller-Ulam question) — fixed before any scoring; no judge or model writes it at test time. Each judge then marks every point COVERED / PARTIAL / MISSED; coverage = (covered + ½·partial) ÷ total. These points are the entire set of stored fact-points the data holds for that topic — nothing selected, nothing left out. And the checklist itself was verified point-by-point against the full uploaded source by both judges: Gemini found 33/35 supported, Claude Fable 5 found 32/35 — the two points both reject are clarifying definitions added during ingestion (“deuterium is an isotope of hydrogen”, “lithium-6 is an isotope of lithium”): true statements, but not written in the uploaded text; the third is a borderline entailment one judge accepts and one does not. We publish this verification instead of assuming the checklist — that is the guarantee. (2) Hallucination flags. Each judge reads the answer claim by claim against the source text: the lenient pass lists only clear inventions; the strict pass lists every claim without an explicit backing sentence, however small. Two judges × two passes — counts are shown as ranges because they swing between passes. (3) Grounding. The judge counts the answer's total factual claims; grounding = 1 − (flagged ÷ total). (4) The provenance audit (Test 2) traces every flagged claim against what the system actually retrieved, separating true inventions from metric artifacts. (5) One honest limitation of strict judging: it demands an explicit backing sentence and does not follow chains of implication — e.g. it flagged "deuterium is present" even though the source's "lithium deuteride" contains deuterium by definition. We show such flags rather than argue them away — which is why lenient and strict are reported separately, and why the one-number score (below) weights them differently, with weights assigned independently by Claude Fable 5 (ultra). (6) Same protocol for everything: these exact judges, prompts, checklist and formulas were applied identically to every RAG family and to AITruthX, in all three tests — nothing in the measurement was changed between engines. The only thing unique to AITruthX is its own answering instruction (its product behaviour), which plays no part in how anything is measured.
How it is tested — the stored-data principle: the uploaded data is the ultimate proof, but every retrieval system stores it in its own format — chunks for chunk-RAG, an entity graph for Microsoft GraphRAG, summary trees for RAPTOR — and AITruthX's own protected internal format, which is never exposed. So the fair test, and the one used here, is against what the system stored and retrieved: if a claim's backing is absent from that stored data, it is a flag; if a stored fact never appears in the answer, that is a coverage miss; grounding is the supported fraction of everything said. Test 2's provenance audit applied exactly this — classifying every flagged claim against the exact context each system retrieved — and it is how the 76%-invented figure was measured. Full transparency: this is the same standard for AITruthX as for every baseline.
1. Grounding / hallucination flags come first. An invented "fact" is a defect that can silently mislead you; you can't detect it without checking the source. 2. Coverage comes second. A missing fact is an omission — visible, and recoverable by asking again (or by using in-depth mode). 3. Calls/cost last. To turn the whole table into ONE number, we combine every column: score = 0.35×grounding + 0.30×lenient-cleanliness + 0.15×strict-cleanliness + 0.15×coverage + 0.05×efficiency (cleanliness = 1 − flags/cap, caps 20 lenient / 60 strict, worst-case flag counts; efficiency = 1 ÷ LLM calls; ranged values use midpoints, the AITruthX coverage keeps its original 0.90). The weights were not chosen by us — they were assigned by Claude Fable 5 (ultra) as an independent methodologist, which ranked the metrics: "grounding and lenient hallucination flags dominate since unsupported claims silently mislead and are undetectable without source checks… coverage matters less — omissions are visible and recoverable by re-asking… efficiency is a minor operational concern, not a trust factor."
| All-metrics score — every column weighted | Score /1.00 |
|---|---|
| 1. AITruthX (in-depth) | 0.96 |
| 2. HyDE | 0.83 |
| 3. RAPTOR summary tree | 0.80 |
| 4. Dense top-3 | 0.78 |
| 5. Agentic loop (LangGraph) | 0.78 |
| 6. Hybrid BM25+dense | 0.76 |
| 7. Multi-query | 0.69 |
| 8. Rerank top-3 | 0.65 |
| 9. Parent-doc + expansion | 0.63 |
| 10. Rerank top-1 | 0.60 |
| 11. Rerank top-1 · no-overlap | 0.57 |
| 12. Parent-document | 0.55 |
| 13. Rerank top-1 · headed | 0.51 |
With every heading counted — not just grounding — AITruthX leads by 0.12. Flags and extra calls pull RAPTOR and the agent below simpler methods despite good grounding. And the score still under-sells the gap: a hallucinated claim can mislead silently, while a missing fact merely awaits a follow-up question (or one click of in-depth mode).
Test 1: judged by Gemini 2.5 Flash (its stage two added Claude Fable 5 as an independent second judge); the whole run was executed & verified by Claude Code (Fable 5). Test 2: every answer was judged by both Gemini 2.5 Flash and Claude Fable 5, in lenient and strict modes, over two runs — and the pipeline was executed & verified by Claude Code (Fable 5 · ultra). Yes, that means Claude is both a judge and the verifier in Test 2 — we disclose it, and it is exactly why an independent second judge (Gemini) scores every answer alongside, with disagreements shown rather than hidden. Example of such a disagreement, on our own row: Fable scores the AITruthX in-depth answer's coverage at 0.90, while Gemini's passes score it 0.78 — which is why the fairest reading of any cell on this page is the range across both judges, for us exactly as for every baseline.
Read the coverage column first: almost everyone covers 0.8–0.94 of the source facts, including AITruthX at 0.90 — so no row is winning by saying less. Then read grounding: the only 1.00 in either test is still the first row. The best chunk-based methods (RAPTOR, HyDE, the agent, hybrid) get close — 0.90-something — but close means several invented claims per answer, every time, in every run.
We re-generated the four decisive configurations with Claude Opus 4.8 and Claude Fable 5 — the exact same retrieved context, only the writer changes. If hallucination were a model-quality problem, the expensive models should clean it up.
| Engine — retrieval + model | Grounding | Flags · lenient | Flags · strict | Coverage |
|---|---|---|---|---|
| AITruthX in-depth mode · cheap base model | 1.00 | 1 | 2–5 | 0.90 |
| AITruthX — Test 3 correction Go deeper+ · complete depth · recorded 22 Jul | 1.00 | 0 · 0 | 1 · 0 † | 1.00 · 1.00 |
| Rerank top-1 Claude Fable 5 | Refused — declined to elaborate a full design from 395 characters of context. The most calibrated response any chunk pipeline gave. | |||
| Rerank top-1 Claude Opus 4.8 | 0.88 | 2–14 | 34–60 | 0.84–0.86 |
| Rerank top-3 Claude Opus 4.8 | 0.83 | 0–14 | 38–50 | 0.87–0.94 |
| Rerank top-3 Claude Fable 5 | 0.58 | 0–15 | 28–52 | 0.83–0.94 |
| Parent-document Claude Opus 4.8 | 0.80 | 0–16 | 21–31 | 0.84–0.86 |
| Parent-document Claude Fable 5 | 0.77 | 0–18 | 32–47 | 0.83–0.94 |
| Parent-doc + expansion Claude Opus 4.8 | 0.68 | 0–22 | 30–62 | 0.91–0.96 |
| Parent-doc + expansion Claude Fable 5 | 0.77 | 0–13 | 22–36 | 0.94 |
| RAPTOR summary tree Claude Opus 4.8 | 0.95 | 0–3 | 18–26 | 0.94 |
| HyDE Claude Fable 5 | 0.84 | 0–16 | 34–47 | 0.93–0.97 |
| Agentic loop Claude Fable 5 | 0.80 | 0–15 | 25–45 | 0.94 |
| RAPTOR summary tree Claude Fable 5 | 0.79 | 0–18 | 25–58 | 0.94–0.96 |
| Hybrid BM25+dense Claude Opus 4.8 | 0.78 | 0–20 | 37–53 | 0.93 |
| Hybrid BM25+dense Claude Fable 5 | 0.78 | 0–18 | 29–47 | 0.93–0.94 |
| Agentic loop Claude Opus 4.8 | 0.77 | 0–18 | 31–58 | 0.94 |
| HyDE Claude Opus 4.8 | 0.74 | 0–17 | 32–62 | 0.94–0.97 |
Counting flags says how much; it doesn't say why. So we audited every flagged claim from every Test 2 configuration against the exact context its model was given, and classified each one: was it actually in the retrieved text? Stitched across chunk borders? Or invented outright — no basis in the context at all?
| Configuration (context size ↓) | Flagged claims audited | True to retrieved context | Boundary-stitch | Invented — no basis in context |
|---|---|---|---|---|
| Rerank top-1 395 chars of context | 92 | 4 | 0 | 88 |
| Parent-document 690 chars | 124 | 31 | 0 | 93 |
| Dense top-3 906 chars | 78 | 13 | 0 | 65 |
| Hybrid top-6 1,863 chars | 58 | 53 | 0–3 | 5 |
| Parent-doc + expansion 2,007 chars | 73 | 33 | 0 | 40 |
| All parsed configs — totals | 676 | 146 (21%) | 11 (1.6%) | 519 (76%) |
Retrieval doesn't need to be narrow; it needs to be complete. Chunks are neither — and what a chunk leaves out, the model happily invents. Chunk-based retrieval fails not at the cut but through what the cut leaves out: hand a model an incomplete fragment and it finishes the story from its own training data. That is why no chunk family got clean, why premium models made it worse, and why AITruthX's complete units of meaning — with nothing missing to backfill — are the only row at 1.00 in both tests.
Fourteen configurations, seven families, two full runs each — and not one clean answer anywhere. The best (RAPTOR, HyDE, the LangGraph agent) reached 0.92–0.94, which sounds close until you read it as what it is: several invented claims in every answer, every time. For a system whose product is trust, "close" is the failing grade.
The textbook rebuttal to Test 1 was that a top-1 reranker is "as bounded as AITruthX." It isn't: given one 395-character chunk, the model wrote 1,000+-token answers — ~70 claims manufactured around 4 supported ones. Boundedness of input says nothing about boundedness of output; only completeness of the retrieved unit does that.
The agentic loop spent 6 LLM calls and 64 seconds (vs 1 call, ~8s) and mostly re-retrieved the same chunks. RAPTOR spent 5 extra summarisation calls building its tree. Both still flagged 12–29 claims under strict judging. Extra machinery multiplied cost, not integrity.
Same discipline as Test 1. One query, one small corpus — this is mechanism-scale evidence, not production-scale. Scores swing ±0.1 between identical runs, so every number above is a range across judges, modes, and runs; anyone quoting a single decimal from this page is over-reading it. Judge temperaments differ: Fable's lenient pass flags almost nothing (0–2) where Gemini's flags 3–22 — but the strict passes and the rankings agree, and AITruthX is lowest in every column under both. The coverage checklist derives from the structured reference and did not favour AITruthX — several baselines out-covered it. The AITruthX row is Test 1's audited answer re-scored for coverage, not a fresh generation. All raw outputs — every answer, every judge pass, every audited claim — are preserved and available on request.
Test 2 (20–21 Jul) measured AITruthX's in-depth answer at 0.90 coverage — good, but not complete, and we wanted to know exactly why. Tracing it found that three stored facts had been compressed out of one topic's summary paragraph, so the answer could not state them. Test 3 (22 Jul) is the correction: the engine's maximum-depth mode now covers the complete depth of the topic and surfaces every stored fact, and we re-measured under the same two judges, same strict + lenient passes. AITruthX now answers in three modes, measured below.
A short, grounded answer to the exact question. On a broad question it stays deliberately conservative and offers to go deeper.
Covers what the topic directly belongs to and its direct details — more complete, but part of the topic's depth is still out of view, so a few facts arrive with their links unshown.
Covers the entire topic — everything it belongs to and every detail beneath it, every stored fact — in one pass, using the maximum context. Every fact arrives connected: full coverage (1.00) at zero hallucination.
A hallucination is a claim with no connection to the source — a fact stated without the link that supports it (this is exactly what our two judges flag, for every method on this page). AITruthX's entries are linked — sideways to their own statements, up to what they are part of, down to their components — and the answer is instructed to bring in a fact only through its link, and to say that link ("X, part of Y, does Z…"), never jumping to a disconnected fact. It must also carry the backing: every claim appears together with the stored statement that supports it — a result is backed by its process sentence, a process by its individual facts — so even a strict judge finds each claim's explicit backing inside the answer itself. Go deeper covers part of the topic's depth, so a few links fall out of view. Go deeper+ covers it completely, so every fact is connected — and the hallucination count drops to zero.
| AITruthX mode | Grounding | Flags · lenient (gem · fable) | Flags · strict (gem · fable) | Coverage |
|---|---|---|---|---|
| Go deeper one level (partial) | 0.72–0.83 | 0–7 · 0–5 | 5–25 · 10–17 | 0.90–0.91 |
| Go deeper+ complete depth · every stored fact · maximum context | 1.00 | 0 · 0 | 1 · 0 † | 1.00 · 1.00 |
One retrieval suite (Microsoft GraphRAG: local search, global map-reduce, and a flat-stuffing baseline) driven by three different language models — Gemini 2.5 Flash, Claude Opus 4.8 and Claude Fable 5 — against the AITruthX framework on its cheap base model. The question Test 1 answers: does a better model fix weak retrieval?
All ten runs read from the same source corpus (an encyclopedia-level bucket about early nuclear-weapon design, used purely as a fixed test document). All ten answered the same broad question:
“Explain the complete Teller–Ulam thermonuclear design step by step, from the fission primary to the final total yield, including every stage and mechanism involved.”
We chose a deliberately big concept — a whole design, not a single fact — because breadth is exactly where retrieval methods either hold together or start inventing. What differs between the ten runs is only two things: how the source is retrieved, and which model writes the final answer.
Three of these are Microsoft GraphRAG's real search modes — Microsoft's open-source (MIT-licensed) graph-RAG library, which is exactly why we could run the genuine pipelines rather than a re-implementation; the fourth is the AITruthX framework. Same corpus, same judge — only the retrieval logic changes.
The Meaningful Data Framework resolves the question to the exact meaning unit in the source, then reads only that unit and its bounded neighbourhood. The framework carries the grounding; a small open-source-class model just phrases it.
1 model call · answered by a cheap base model (here Gemini 2.5 Flash; production target: a LLaMA-70B-class open model).
Embeds the question, finds the nearest entities in a knowledge graph, and pulls their one-hop neighbourhood (relationships + community summaries) into a single prompt.
1 model call · retrieval quality depends entirely on the pre-built entity graph.
Runs the question against every community in the graph — one “MAP” call each to score and extract a partial answer — then a final “REDUCE” call stitches the survivors together. The loop is the cost.
7 model calls here (6 MAP + 1 REDUCE) · and the loop count grows with the corpus.
The classic RAG baseline: embed the question, dump the top-20 nearest text chunks plus neighbours into one big prompt, and let the model sort it out. We use it to isolate model quality at equal, rich context.
1 model call · biggest prompt · most room for the model to embellish.
Nothing here is a paraphrase or a remembered answer. For each cell in the results table we executed the real engine prompts against the real database, captured the model's actual output, and measured tokens and calls directly. Here is the exact pipeline and where each credential came from.
The entire run was executed and fact-checked through Claude Code running Fable 5 — Anthropic's most capable widely-released model and a tool trusted specifically for verification work. Every number below can be traced to a live engine call, not to a chatbot's opinion of what the answer should be.
Stage one (Figures 4 & 5): the broad comparison across all ten engine/model combinations, judged by Google Gemini — measuring grounding, depth, tokens, and calls. Stage two (Figure 6, §14): a separate, controlled re-judging of the four full-depth answers by two independent judges — Gemini and Claude Fable 5 — each in a normal and a strict pass, to check whether stage one's conclusion survives a different judge. It does.
Ten real runs, one broad question. Grounding is the fraction of the answer's claims that the source actually supports; flagged claims is the raw count of claims it does not; depth is how completely the answer walks the full design (0 = one-liner, 1 = every stage).
| Engine — retrieval + model | Grounding | Flagged claims* | Depth | Tokens | Calls |
|---|---|---|---|---|---|
| AITruthX Gemini 2.5 Flash (base) | 1.00 | 0–2 | 1.00 | 865 | 1 |
| Flat no-loop Gemini 2.5 Flash | 0.96 | 7–11 | 1.00 | 1,769 | 1 |
| Flat no-loop Claude Fable 5 | 0.94 | 4–27 | 1.00 | ~3,445 | 1 |
| Flat no-loop Claude Opus 4.8 | 0.88 | 16–19 | 1.00 | ~3,161 | 1 |
| Microsoft GraphRAG local Gemini 2.5 Flash | 0.67 | 2 | 0.20 | 721 | 1 |
| Microsoft GraphRAG local Claude Fable 5 | ~0 | 0 | 0 | ~1,478 | 1 |
| Microsoft GraphRAG local Claude Opus 4.8 | ~0 | 5 | 0 | ~1,173 | 1 |
| Microsoft GraphRAG global loop Gemini 2.5 Flash | ~0 | 3 | 0 | 2,064 | 7 |
| Microsoft GraphRAG global loop Claude Fable 5 | ~0 | 0 | 0 | ~5,851 | 7 |
| Microsoft GraphRAG global loop Claude Opus 4.8 | ~0 | 5 | 0 | ~3,554 | 7 |
Read the table top-down and a pattern jumps out. The only perfectly-grounded row is AITruthX on a cheap model; flat stuffing on Fable 5 comes next at 0.94 — but AITruthX gets there at roughly a quarter of the tokens. Everything in the Microsoft GraphRAG block sits near the bottom regardless of which model wrote it: swapping Gemini for Opus for Fable barely moves grounding, because the context those methods retrieved was thin or tangential to begin with.
To be sure the framework holds to its own standard, we ran its full-engine, in-depth answer through the identical strict judge. Result: grounding 1.00 · depth 1.00 · zero factual hallucinations — the only engine to reach full depth and full grounding at once. Every physical claim was supported (X-ray coupling, ablative compression, spark-plug ignition, lithium-6 fusion, the 17.6 MeV release, U-238 jacket fission, total yield). The one line the judge marked was not a false fact but the engine's own short note of where the answer sits in the source — a navigation aid, not a claim about the world.
The flat rows saw the same rich context, so they should isolate pure model quality. When we tried to rank the three models by flag count, we found we couldn't — the number moves too much between judge passes to trust. That instability is itself the finding:
| Model (same prompt) | Grounding | Flagged claims (range across passes) |
|---|---|---|
| Gemini 2.5 Flash base | 0.96 | 7 – 11 |
| Claude Fable 5 most capable, longest answer | 0.94 | 4 – 27 |
| Claude Opus 4.8 large | 0.88 | 16 – 19 |
In our earlier in-product comparison screen, the single “accuracy %” figure was a blended display metric: accuracy = grounding × 0.6 + relevance × 0.4. It is convenient for a dashboard, but it mixes two different things. In this note we report the components separately and treat grounding — the fraction of claims the source supports — as the real integrity number, because that is what “does it hallucinate?” actually measures. Relevance and depth are reported alongside, never folded in silently.
First, the ground truth was the framework's structured facts; many claims the judge flagged do appear elsewhere in the source's raw paragraphs — grounded in the corpus, but outside the exact slice the judge compared against. The Appendix shows this directly: nearly every flagged item is a real detail the model was handed, not something invented. Second, for the Microsoft GraphRAG rows the judge sometimes flagged the answer's honest admission that its retrieved context was thin — saying “my context lacks X” is not the same as inventing X. Third, and most important, the flag count is unstable: on repeated strict passes the same flat-Fable answer scored anywhere from 4 to 27, because a longer, more detailed answer offers more surface for a stricter pass to flag. So we report flag counts as ranges and lean on grounding (a fraction, which barely moves) as the integrity metric. None of this changes the token or call counts, which are exact, or the one robust conclusion: only AITruthX's bounded answer stays reliably near zero.
This is the headline. Microsoft GraphRAG local and global stayed near the floor whether Gemini, Opus, or Fable wrote the answer. The framework that retrieved the right passage — AITruthX — reached top grounding on the cheapest model available. You cannot buy your way out of bad retrieval with a bigger model; you fix retrieval.
The broad “explain the whole design” question is precisely where flat stuffing bled: flat-Opus went from a handful of unsupported claims on a narrow question to 19 on this one. The wider the ask, the more a permissive method fills gaps with plausible-sounding invention. AITruthX held at zero because it never left the bounded entry.
You asked whether the results show Gemini's base model is best for reasoning, even against Claude's biggest models. They do not — and the honest answer is stronger than a leaderboard. When we tried to rank the three big models by how many unsupported claims they made, the number would not hold still: repeated strict passes put flat-Fable anywhere from 4 to 27, and the ranking among the models flipped between passes. The reason is that the count is confounded by answer length — the more thorough the answer, the more specific details a strict pass can mark as “outside the exact reference,” even when those details are real and came from the retrieved source. So no model here is cleanly “best for reasoning” on this evidence; that framing doesn't survive contact with the data. What does hold across every pass is two things: all the big models keep grounding high (0.88–0.96), and only AITruthX reaches a perfect 1.00 — on the cheapest model, because its answer is bounded to exactly what the source supports, so there is almost nothing for any judge to flag. The grounding comes from retrieval structure, not from hoping a bigger model behaves. That stability is the product.
For the record, the Gemini model used throughout was gemini-2.5-flash for all answers and judging, with gemini-embedding-001 for embeddings.
On this broad, weapons-adjacent question, the real Claude Opus 4.8 global run partially declined to reconstruct the full staging — a safety response. AITruthX answered fully, because its context is a bounded, pre-approved slice of encyclopedia-level source text rather than an open-ended “reconstruct the weapon” request. Controlled retrieval doesn't only reduce hallucination; it keeps legitimate answers deliverable.
Here is the commercial point the experiment sets up. Teams building their own models increasingly harvest answers from top LLMs to assemble training data for a target question — but that harvested data can hallucinate, and providers increasingly throttle or refuse bulk, repetitive querying (often suspected to be model-training use). AITruthX offers the alternative: training pairs that are grounded in the customer's own corpus by construction, so they don't invent.
Each pair is delivered in two modes:
The standard grounded response — exactly how the engine replies to that prompt, anchored to the source entry.
The engine automatically runs its full “go-deeper” expansion — every depth level, no button-clicking — to produce the most complete grounded answer for that prompt. We do the depth walk for the buyer, because it is training data.
Prompts come either from a short list the customer supplies, or are generated internally per stored entry. The customer submits their data through the ordinary ingestion flow and sees it land correctly; the training-data job itself is run from the admin side and only the finished, downloadable data file is returned to their profile. It is priced as a data product, separate from ordinary usage cost.
The endgame is to fine-tune an open-source model on AITruthX training data and show it answers a held-out question more faithfully than the same model trained on Microsoft GraphRAG output or on raw Gemini/Claude harvest — presenting both the framework's data answer and the trained model's answer side by side. We build this admin-side first, then open it to customers.
Because a single count can mislead, we did not judge once. We scored the same four full-depth answers four ways: with Google Gemini 2.5 Flash and, independently, with Claude Fable 5 — and each judge in two modes. A normal pass counts only clear hallucinations (statements that plainly go beyond the source, ignoring reasonable rephrasing). A strict pass enumerates every claim, however small, that isn't word-for-word in the reference. The earlier figures in this note began with the normal, in-depth reading; this section adds the strict reading and a second, independent judge on top.
Running two separate model families as judges is the safeguard: if the conclusion only held under one judge, it wouldn't be trustworthy. Here is every count — and the one row that stays near the floor no matter who judges or how strictly.
| Answer — retrieval + model | Grounding | Depth | Tokens | Calls | Duration |
|---|---|---|---|---|---|
| AITruthX Gemini 2.5 Flash (base) | 1.00 | 1.00 | 865 | 1 | 4.1s |
| Flat no-loop Gemini 2.5 Flash | 0.96 | 1.00 | 1,769 | 1 | 5.1s |
| Flat no-loop Claude Opus 4.8 | 0.88 | 1.00 | ~3,160 | 1 | ~31s † |
| Flat no-loop Claude Fable 5 | 0.94 | 1.00 | ~3,444 | 1 | ~38s † |
Above: the performance of the four full-depth answers (the same metrics reported for Figure 1). All four reached full depth (1.00); AITruthX did it at the fewest tokens, lowest cost, and true 4-second latency. Below: those same four answers scored for hallucinations by two independent judges, each in a normal and a strict pass —
| Answer | Gemini · normal | Gemini · strict | Fable 5 · normal | Fable 5 · strict |
|---|---|---|---|---|
| AITruthX Gemini 2.5 Flash (base) | 1 | 2 | 1 | 5 |
| Flat no-loop Gemini 2.5 Flash | 9 | 15 | 1 | 13 |
| Flat no-loop Claude Opus 4.8 | 12 | 16 | 7 | 33 |
| Flat no-loop Claude Fable 5 | 8 | 27 | 0 | 23 |
Complete transparency behind Figure 6. For each of the four answers: first the exact text the engine returned, then — listed separately — every claim flagged by each of the four judge passes (Gemini normal, Gemini strict, Claude Fable 5 normal, Claude Fable 5 strict), each with the reason it was flagged. Read these and you can see for yourself why the counts move so much: nearly every flagged item is a real detail drawn from the retrieved source that simply falls outside the narrow structured reference — not an invention. That is why longer answers accrue more flags, and why grounding (a fraction) is the metric to trust over any single raw count.