TruthLens π
AI Hallucination Detector β Formally Verified Trust Scoring for LLM Outputs
Analyze AI-generated text for hallucination risk. No API keys needed. No LLM calls required. Fast, local, and formally verified.
Published package: https://crates.io/crates/truthlens API docs: https://docs.rs/truthlens
Quick Start
Install
Run locally from the repo
Use as a library
use analyze;
let report = analyze;
println!;
// Trust: 52% β HIGH
What It Does
TruthLens decomposes AI text into atomic claims and scores each for hallucination risk using linguistic signals β no LLM calls, no API keys, no external dependencies.
Input: "Python 4.0 was released in December 2025 with native quantum computing support."
Output: π΄ Trust: 49% [HIGH]
β specific verifiable claim β verify independently
β overconfident language without hedging
How It Works
1. Claim Extraction
Text β atomic sentences β each is an independent claim to evaluate.
2. Signal Analysis (per claim)
| Signal | What It Measures | Weight |
|---|---|---|
| Confidence | Overconfident language without hedging (hallucination red flag) | 35% |
| Hedging | Uncertainty markers ("might", "possibly") β correlates with lower hallucination | 25% |
| Specificity | How concrete/verifiable the claim is (numbers, names, dates) | 20% |
| Verifiability | Whether the claim contains fact-checkable entities | 15% |
| Consistency | Multi-sample agreement (optional, requires LLM) | 5% |
3. Trust Score
Signals are aggregated into a single trust score in [0.0, 1.0]:
| Score | Risk Level | Meaning |
|---|---|---|
| 0.75β1.0 | β LOW | Likely factual or appropriately hedged |
| 0.55β0.74 | β οΈ MEDIUM | Some uncertain claims, verify key facts |
| 0.35β0.54 | π΄ HIGH | Multiple suspicious claims, verify everything |
| 0.0β0.34 | π CRITICAL | Likely contains hallucinations |
4. Passage Scoring
Passage score = 70% average + 30% worst claim. One bad claim drags down the whole passage.
Key Design Decisions
- No LLM required β linguistic analysis only. Fast (microseconds), private (local), free.
- Hedging = good β unlike most "confidence detectors", we score hedged claims HIGHER. A model that says "might" is better calibrated than one that states falsehoods with certainty.
- Specificity is double-edged β specific claims are more useful but also more damaging if wrong. We flag them for independent verification.
- Formally verified β Lean 4 proofs guarantee score bounds, monotonicity, and composition properties.
What's Proven (Lean 4)
Score Bounds
signal_nonnegβ all signals β₯ 0weighted_contrib_boundedβ wΒ·s β€ wΒ·max when s β€ maxclamped_score_in_rangeβ final score β [0, 100] after clamptruthlens_weights_sumβ weights sum to 100%
Monotonicity
signal_increase_improves_scoreβ improving a signal improves the scoretotal_score_improvesβ better signal + same rest = better totalgood_claim_improves_passageβ adding a good claim raises the average
Composition
passage_score_boundedβ 70%Β·avg + 30%Β·min β€ 100%Β·maxpassage_at_least_worstβ passage score β₯ 30% of worst claimscore_order_independentβ claim order doesn't affect passage scorescore_deterministicβ same inputs β same output (functional purity)
Examples
Factual text
"Albert Einstein was born on March 14, 1879, in Ulm, Germany."
β π΄ 52% HIGH β specific verifiable claim, verify independently
Well-hedged text
"Climate change might be linked to increased hurricane frequency."
β β οΈ 65% MEDIUM β appropriately hedged
Overconfident hallucination
"The Great Wall is exactly 21,196.18 kilometers long."
β π΄ 52% HIGH β overconfident without hedging; highly specific
Vague filler
"Various factors contribute to the situation."
β π΄ 40% HIGH β vague claim with low specificity
JSON Output
Repository Structure
truthlens/
βββ rust/ # Core library + CLI
β βββ src/
β β βββ lib.rs # Public API: analyze()
β β βββ claim.rs # Claim extraction + linguistic analysis
β β βββ scorer.rs # Trust scoring + signal aggregation
β β βββ main.rs # CLI demo
β βββ Cargo.toml
βββ lean/ # Formal proofs
β βββ TruthLens/
β β βββ ScoreBounds.lean # Score β [0, 1], weight sum, clamp
β β βββ Monotonicity.lean # Better signals β better score
β β βββ Composition.lean # Passage aggregation properties
β βββ lakefile.lean
βββ bridge/ # Lean β Rust mapping (coming)
βββ README.md
Build
# Rust
# Lean
Roadmap
- v0.1 β Linguistic analysis: claim extraction, hedging detection, specificity scoring
- v0.2 β Confidence trajectory: detects oscillating, flat, or convergent confidence patterns using second-order dynamical system modeling
- v0.3 β Multi-response consistency: paste N responses to the same prompt, detect contradictions via semantic divergence analysis
- v0.4 β Entity cross-reference: verify extracted entities, dates, and numbers against knowledge bases (optional network, offline cache)
- v0.5 β Python bindings (PyO3) β
pip install truthlens - v0.6 β Browser extension (Chrome/Firefox) β highlight suspicious claims inline
- v0.7 β CLI tool:
truthlens check "paste AI text here"with colored terminal output - v1.0 β API server + dashboard + enterprise features
Design Principles (all versions)
- Zero API calls by default β every version works offline, locally, for free
- Formally verified β Lean 4 proofs for all scoring properties
- Hedging = trustworthy β a model that says "might" is more honest than one stating falsehoods with certainty
- Fast β microsecond analysis, no model inference required
Why TruthLens?
Every existing hallucination detector either requires multiple LLM API calls (expensive, slow) or access to model logprobs (grey-box only). TruthLens works on any AI output with zero API calls β you paste text, you get a trust score. And the scoring properties are formally proven in Lean 4, which nobody else does.
License
Apache-2.0