Skip to main content
Verify a claim before you act on it. Knowing it’s real and backed by a source today means chasing it down by hand, or trusting that an LLM hasn’t fabricated a citation. Gildea does that work up front: every sentence it serves is tied to one or more verbatim evidence snippets from the cited source, and rigorously audited for hallucinated entities, numbers, and dates, as well as epistemic drift. That’s a different bar from LLM-as-a-judge: entailment against the source, deterministic checks, and human review where flagged. See how it works.

The recipe

1

Trust the served set

Every unit (a single sentence) returned by search or signal detail has passed verification (verdict = pass). Gildea never serves unverified text, so there’s no “filter the hallucinations” step. See Verification.
2

Read the evidence

Each unit carries evidence.snippets, verbatim text from the source that supports it. The snippet is a short preview (about the first 100 characters): a locator into the source, not the full passage. citation.url is the full audit path, and verification.human_reviewed appears when a human signed off.
3

Verify it yourself

You don’t have to take the verdict on faith. Point your agent at citation.url, have it find the passage the snippet locates, and confirm the source entails the sentence. This is “verify us,” not “trust us.”
Install gildea and anthropic, set GILDEA_API_KEY and ANTHROPIC_API_KEY, then:
import re
import httpx
import anthropic
from pydantic import BaseModel
from gildea import Gildea

claude = anthropic.Anthropic()   # reads ANTHROPIC_API_KEY
gildea = Gildea()                # reads GILDEA_API_KEY

# 1. Grab a served unit, its evidence snippet, and its citation
hits = gildea.search("AI data center power and compute constraints", limit=20)["results"]
hit = next(h for h in hits if "substack.com" in (h["citation"].get("url") or ""))
unit, citation = hit["unit"], hit["citation"]
snippet = unit["evidence"]["snippets"][0]["text"]   # ~100-char locator, not the full passage

# 2. Fetch the cited source yourself and strip it to text
html = httpx.get(citation["url"], timeout=20, follow_redirects=True,
                 headers={"User-Agent": "Mozilla/5.0"}).text
source = re.sub(r"\s+", " ", re.sub(r"<[^>]+>", " ", html))[:20000]

# 3. Confirm independently: is the snippet really in the source, and does the source entail the sentence?
class Check(BaseModel):
    snippet_in_source: bool   # the 100-char snippet is genuinely a substring of the source
    entailed: bool            # the source supports the served sentence
    supporting_quote: str     # the full passage the snippet was a preview of

result = claude.messages.parse(
    model="claude-opus-4-8",
    max_tokens=2000,
    system=("You are independently verifying a sentence an API served. Given the source text, the "
            "evidence snippet, and the sentence: confirm whether the snippet appears in the source, "
            "quote the supporting passage, and judge whether the source entails the sentence."),
    messages=[{"role": "user", "content":
        f"SOURCE:\n{source}\n\nEVIDENCE SNIPPET: {snippet}\n\nSERVED SENTENCE: {unit['text']}"}],
    output_format=Check,
).parsed_output

print(f"served sentence: {unit['text']}")
print(f"snippet genuinely in source: {result.snippet_in_source} | source entails sentence: {result.entailed}")
print(f"full passage: {result.supporting_quote[:160]}")

What you get

A working set you can stand behind: free of the fabricated and mis-cited claims that plague the LLM + web search path. The trust is the evidence, with every sentence traceable to one or more verbatim evidence snippets.

How verification works