Spaces:
Runtime error
title: ClaimCheck.AI - Agentic Fact Verification
emoji: π
colorFrom: blue
colorTo: green
sdk: docker
sdk_version: 4.36.0
app_file: app/main.py
pinned: false
license: mit
python_version: 3.9
suggested_hardware: cpu-basic
ClaimCheck.AI β Agentic Fact Verification for Calls
ClaimCheck.AI is an multi-agent AI platform that turns meeting audio (Zoom/phone) into an evidence-backed report:
- ASR Agent β transcript + timestamps
- Claim Extraction (watsonx.ai LLM) β JSON claims
- Evidence Retrieval (watsonx.ai Embeddings + FAISS + optional Rerank) β KB hits
- Verification (watsonx.ai LLM) β supported/refuted/insufficient + citations
- Summarizer (watsonx.ai LLM) β executive summary + action items
β¨ Why it matters
High-stakes calls contain promises and metrics (SLA, compliance, finance). ClaimCheck.AI verifies statements against your trusted KB so decisions are grounded in factsβnot memory.
π§ Project structure
claim-check/
ββ app/
β ββ agents/
β β ββ claims.py # Claim extractor (watsonx.ai Prompt Lab / LLM)
β β ββ retriever.py # IBM embeddings + FAISS + optional rerank
β β ββ verifier.py # LLM verdicts (supported/refuted/insufficient)
β β ββ summarizer.py # LLM executive summary + action items
β ββ core/
β β ββ config.py # env wiring (IBM base url, project, keys)
β β ββ json_utils.py # robust JSON extraction from LLM outputs
β ββ schemas/ # pydantic models (Claim, Evidence, Verdict, CallReport)
β ββ services/
β β ββ asr.py # Speech to Text model
β ββ main.py # FastAPI: /health, /process-audio, /process-transcript
ββ kb/
β ββ snippets.jsonl # your knowledge base (facts; one JSON per line)
β ββ index/ # FAISS index (auto-built)
ββ data/audio/ # demo audio files
ββ .env # local secrets (NOT committed)
ββ .env.sample # template for env vars (safe to commit)
ββ requirements.txt
ββ README.md
π Deploy on Hugging Face Spaces
This app is configured to run on Hugging Face Spaces. The configuration header at the top of this README handles the deployment settings.
Environment Variables for Spaces
You'll need to set these secrets in your Hugging Face Space settings:
# IBM Core
WATSONX_BASE_URL=https://us-south.ml.cloud.ibm.com
WATSONX_PROJECT_ID=<your-watsonx-project-id>
WATSONX_API_KEY=<your-ibm-cloud-api-key>
IBM_API_VERSION=2023-05-29
# Models
IBM_EMBEDDINGS_MODEL_ID=ibm/granite-embedding-107m-multilingual
IBM_RERANK_MODEL_ID=ibm/slate-30m-english-rtrvr-v2
IBM_VERIFIER_MODEL_ID=ibm/granite-3-8b-instruct
IBM_SUMMARY_MODEL_ID=ibm/granite-3-8b-instruct
IBM_CLAIM_MODEL_ID=ibm/granite-3-8b-instruct
# Speech to Text (IBM)
IBM_STT_URL=<your-ibm-stt-instance-url>
IBM_STT_APIKEY=<your-ibm-stt-api-key>
# Whisper fallback (optional)
WHISPER_MODEL_SIZE=base
WHISPER_DEVICE=cpu
WHISPER_COMPUTE_TYPE=int8
π§ͺ Quick start (Local Development)
1) Python env
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
2) Configure IBM (edit .env)
Copy the sample and fill in values from your IBM Cloud / watsonx project.
cp .env.sample .env
3) Seed the KB
Put your facts in kb/snippets.jsonl (one JSON per line). Example:
{"doc_id":"uptime_q2_report","source":"Global Uptime Dashboard","snippet":"Q2 2025 uptime was 99.982% globally; LATAM outage lowered regional uptime to 99.965%.","metadata":{"quarter":"Q2","year":2025}}
If you change the KB, rebuild the index by deleting the kb/index/ folder.
4) Run the API
uvicorn app.main:app --reload --host 0.0.0.0 --port 7860
5) Run the UI (Local Only)
cd ui/claimcheck-ui
pnpm install
pnpm dev
- If you change the UI dev port/host, add it to
allow_originsinapp/main.py.
6) Try it
Transcript path (no audio):
curl -X POST http://127.0.0.1:7860/process-transcript \
-H "Content-Type: application/json" \
-d '{"text":"We achieved 99.99% uptime in Q2. P95 latency under 200 ms globally. Default retention is 30 days."}'
Audio path (IBM STT):
curl -X POST http://127.0.0.1:7860/process-audio \
-F "file=@data/audio/demo_call.wav"
Health:
curl http://127.0.0.1:7860/health/ibm
π§ How it works (agentic)
π§ Core Concepts and Models
ClaimCheck.AI combines modern agentic AI orchestration with core NLP, IR, and speech processing techniques. Each agent is powered by a specific model or algorithm:
| Agent | Function | Model/Tool Used | Concepts |
|---|---|---|---|
| ASR Agent | Audio transcription + timestamps | IBM Speech-to-Text or Whisper |
Automatic Speech Recognition (ASR), Diarization |
| Claim Extractor | Turns transcript β atomic claims | watsonx.ai Prompt Lab + granite-3-8b-instruct |
Information Extraction, Prompt Engineering |
| Retriever | Find matching KB facts | granite-embedding-107m-multilingual, FAISS, optional slate-30m-rtrvr |
Embedding-based Retrieval, Vector Search, Reranking |
| Verifier | Evaluate support/refute status | granite-3-8b-instruct |
Fact Verification, Retrieval-Augmented Generation (RAG) |
| Summarizer | Generate exec summary + action items | granite-3-8b-instruct |
Abstractive Summarization, Plan Extraction |
π‘οΈ Notes on data & security
- Do not commit
.envor audio with sensitive content. - Use IBM Cloud secrets manager / vault in production.
- All third-party calls are behind explicit env flags; the pipeline fails safe (insufficient) if evidence is missing.
π§° Troubleshooting
- Embeddings 400 β ensure
versionquery param, body includes"inputs"and"model_id". - FAISS dim mismatch β delete
kb/index/after changing embedding model. - OpenMP error (macOS) β set
KMP_DUPLICATE_LIB_OK=TRUEandOMP_NUM_THREADS=1. - JSON parse errors β we use a robust extractor; check server logs
[RAW OUTPUT]. - Rebuild index β Incorrect evidence showing up in the evidence drawer
rm -f kb/index/kb.index kb/index/kb_meta.json
python -c "from app.agents.retriever import _build_or_load; _build_or_load(); print('rebuild done')"
π License
MIT License - see LICENSE file for details.
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference