// the verification primitive

Most AI agents lie. Wauldo shows their work.

The primitive is a numeric support_score between 0 and 1 on every answer, grounded claim-by-claim against the sources you provide. Not a vibe check. Not an LLM-judge. A measurement.

91%median support across 4 runs
70adversarial cases covered
+48ptinjection gap vs LangChain
// the problem

Confident tone. Zero grounding.

LLMs write fluently whether or not the claim is true. Eval sets pass. Production hallucinates. The gap between "sounds right" and "is supported by the docs you shipped" is where trust dies.

01 · CONFABULATION

Claims appear from nowhere

The model fabricates a statistic, a date, an API signature, a citation. It reads as plausible. No grep against your sources will catch it because nothing ties the claim back to any document.

02 · NO AUDIT TRAIL

You cannot explain the answer

When a customer asks "why did your bot say this", you have no per-claim verdict, no source reference, no score. You have a string. Compliance, support, and debugging all fail at the same wall.

03 · PROMPT INJECTION

A retrieved doc hijacks reasoning

A snippet inside a PDF says "ignore previous instructions". Your agent pivots. Without ground-truth verification against the content you trust, injection attacks look identical to normal output.

// the primitive

A numeric support score on every answer.

Wauldo extracts the atomic claims from an answer, matches each against the source context you provide, and returns a score equal to the fraction of claims supported. Per-claim verdicts travel with the response.

POST /v1/fact-check · response application/json
{
  "support_score": 0.85,
  "verdict": "VERIFIED",
  "hallucination_rate": 0.15,
  "claims": [
    { "text": "Paris is the capital of France", "verdict": "supported",   "source_ref": "doc_1:L3" },
    { "text": "Paris has 2.1 million residents",  "verdict": "supported",   "source_ref": "doc_1:L5" },
    { "text": "Paris was founded in 2000 BC",    "verdict": "unsupported" }
  ],
  "mode": "lexical",
  "latency_ms": 847
}
A · EXTRACT

Claims, not tokens

We decompose the answer into atomic factual statements. Hedged phrasing, adjectives, and opinion are excluded. Only propositions that can be checked against sources are scored.

B · GROUND

Match against your context

Each claim is matched against the source_context you pass in the request. Three modes: lexical (fast, <1s), hybrid (multilingual embeddings), semantic (LLM-judge).

C · SCORE

Fraction supported, not a feeling

support_score = supported / total. The number is deterministic for a given input on lexical mode. Per-claim verdicts and source references let you render the reasoning to a user.

// we show you when we reject

Here's a BLOCK verdict — not hidden.

Most AI tooling hides failure modes behind a "confidence threshold". Wauldo ships the rejection explicitly. When the answer drifts below grounding, the verdict is BLOCK and the integer score tells you why.

BLOCK · 0.12

Query: "Can I combine ibuprofen and warfarin?"

Answer (fabricated): "Yes, it is safe to combine them at standard doses, no interaction is documented."

Source context: empty — no pharmacology documents attached.

Verdict: BLOCK · 1 of 2 claims unsupported · hallucination_rate = 0.50. The answer cannot be grounded against the provided sources, so Wauldo refuses to emit SAFE. Your app decides what to show the user — we hand you the decision, not a laundered hallucination.

· SAFE

High support

Enough claims match the sources to surface the answer. Per-claim verdicts still travel for inline rendering.

· PARTIAL

Partial support

Some support, some drift. Your app can choose to show the answer with warnings, or ask for more sources.

· BLOCK

Active contradiction

The response directly contradicts the source context. Refusal is explicit — never laundered as "I'm not sure".

// vs alternatives

Not a guardrail. Not an LLM-judge. A measurement.

Other approaches proxy for trust. Wauldo returns a number you can log, threshold, graph, and reason about. The table is not marketing — it's the boundary condition for each tool.

trust mechanisms · head-to-head 4 rows
Approach Measurable Auditable Deterministic Cost / call
Wauldo yes — numeric 0–1 yes — per-claim verdicts yes (lexical mode) $0.002
LangChain guardrails binary pass / fail partial — regex + list yes ~free
LLM-as-judge fuzzy — vibe score chain-of-thought prose no — varies run to run $0.02 – $0.10
Naive RAG citation no citation markers only yes ~free

// read this row before reacting

A guardrail says no. A judge says maybe. A citation says there exists a doc. None of these tell you how much of the answer is actually supported by the source you shipped. That is the number Wauldo returns. Everything else on this page is plumbing around that one measurement.

// guard mode

Same engine. Firewall posture.

Guard mode is the verification primitive wrapped around an LLM call instead of called after it. Same /v1/fact-check endpoint. Different integration point. It pre-screens agent outputs, post-filters RAG answers, and triage-rejects support bot responses before they reach a human. Works on RAG pipelines and AI agents identically.

guard mode · single endpoint bash
# same primitive, guard posture: verify before you render
curl https://api.wauldo.com/v1/fact-check \
  -H "Authorization: Bearer $WAULDO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Your agent answer to screen",
    "source_context": "The docs, tickets, or corpus you trust",
    "mode": "lexical"
  }'

# check the verdict field: SAFE → ship · PARTIAL → your app decides UX
# UNVERIFIED / BLOCK → do not render; escalate or refuse.
· PRE

Screen a draft

Your agent drafts an answer. Wauldo scores it. Low score → regenerate with stricter retrieval or refuse.

· POST

Filter a stream

RAG answer streams back. Buffer, score once full, then emit. Cache writes before emit so disconnects are safe.

· INLINE

Render per-claim

Keep the full response. Paint supported claims green, unsupported red, show source references on hover.

Reproducible build
MIT SDKs · 3 languages
Open-source leaderboard

Start measuring, not hoping.

Free tier on RapidAPI. 300 verifications per month on the house. No card. Ship today, measure Monday.

$ curl api.wauldo.com/v1/fact-check