Spaces:
Runtime error
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. git branch -M main
π§ 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
π§ͺ Quick start
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
Required env keys:
# 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 # 384-dim
IBM_RERANK_MODEL_ID=ibm/slate-30m-english-rtrvr-v2 # optional
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> # e.g. https://api.us-south.speech-to-text.watson.cloud.ibm.com/instances/XXXX
IBM_STT_APIKEY=<your-ibm-stt-api-key>
# Whisper fallback (optional)
WHISPER_MODEL_SIZE=base
WHISPER_DEVICE=cpu
WHISPER_COMPUTE_TYPE=int8
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
# macOS OpenMP fix (optional) + run
KMP_DUPLICATE_LIB_OK=TRUE OMP_NUM_THREADS=1 uvicorn app.main:app --reload
5) Try it
Transcript path (no audio):
curl -X POST http://127.0.0.1:8000/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:8000/process-audio -F "file=@data/audio/demo_call.wav"
Health:
curl http://127.0.0.1:8000/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].