Verified AI answers from your documents — or no answer at all.
Most RAG APIs guess. Wauldo verifies.
0% hallucination | 83% accuracy | 61 eval tasks | 14 LLMs tested
Demo • Docs • Free API Key • Benchmarks
pip install wauldofrom wauldo import HttpClient
client = HttpClient(base_url="https://api.wauldo.com", api_key="YOUR_API_KEY")
result = client.guard(
text="Returns are accepted within 60 days.",
source_context="Our policy allows returns within 14 days.",
)
print(result.verdict) # "rejected"
print(result.claims[0].reason) # "numerical_mismatch"client.rag_upload(content="Our refund policy allows returns within 60 days...", filename="policy.txt")
result = client.rag_query("What is the refund policy?")
print(result.answer) # Verified answer with sources
print(result.sources) # [RagSource(document_id='...', score=0.95)]Try the demo | Get a free API key
Typical RAG pipeline
retrieve → generate → hope it's correct
Wauldo pipeline
retrieve → extract facts → generate → verify → return or refuse
If the answer can't be verified, it returns "insufficient evidence" instead of guessing.
Document: "Refunds are processed within 60 days"
Typical RAG: "Refunds are processed within 30 days" ← wrong
Wauldo: "Refunds are processed within 60 days" ← verified
or "insufficient evidence" if unclear ← safe
result = client.upload_file("contract.pdf", title="Q3 Contract")
print(f"Extracted {result.chunks_count} chunks")
result = client.rag_query("What are the payment terms?")
print(f"Answer: {result.answer}")
print(f"Confidence: {result.get_confidence():.0%}")reply = client.chat_simple("auto", "Explain Python decorators")
print(reply)from wauldo import ChatRequest, HttpChatMessage
request = ChatRequest(model="auto", messages=[HttpChatMessage.user("Hello!")])
for chunk in client.chat_stream(request):
print(chunk, end="", flush=True)- Pre-generation fact extraction — numbers, dates, limits injected as constraints before the LLM call
- Post-generation grounding check — every answer verified against sources
- Guard API — verify any claim against any source (3 modes: lexical, hybrid, semantic)
- Native PDF/DOCX upload — server-side extraction with quality scoring
- Smart model routing — auto-selects cheapest model that meets quality
- OpenAI-compatible — swap your
base_url, keep your existing code - Sync — simple, synchronous API
- Production RAG systems that need reliable answers
- Teams where "confidently wrong" is unacceptable
- Legal, finance, healthcare, support automation
- Anyone replacing "hope-based" RAG
| Metric | Result |
|---|---|
| Hallucination rate | 0% |
| Accuracy | 83% (17% = correct refusals) |
| Eval tasks | 61 |
| LLMs tested | 14 models, 3 runs each |
| Avg latency | ~1.2s |
from wauldo import WauldoError, ServerError, AgentTimeoutError
try:
response = client.chat(ChatRequest.quick("auto", "Hello"))
except ServerError as e:
print(f"Server error: {e}")
except AgentTimeoutError:
print("Request timed out")
except WauldoError as e:
print(f"SDK error: {e}")client = HttpClient(
base_url="https://api.wauldo.com",
headers={
"X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY",
"X-RapidAPI-Host": "smart-rag-api.p.rapidapi.com",
},
)Free tier (300 req/month): RapidAPI
PRs welcome. Check the good first issues.
- @qorexdev — async client
MIT — see LICENSE