ClaimCheckAI / README.md
stutiagrawal's picture
Initial commit
ca4ed58
|
Raw
History Blame
5.25 kB

ClaimCheck.AI β€” Agentic Fact Verification for Calls (IBM watsonx)

ClaimCheck.AI is an agentic AI pipeline that turns meeting audio (Zoom/phone) into an evidence-backed report:

  1. ASR Agent (IBM STT) β†’ transcript + timestamps
  2. Claim Extraction (watsonx.ai LLM) β†’ JSON claims
  3. Evidence Retrieval (watsonx.ai Embeddings + FAISS + optional Rerank) β†’ KB hits
  4. Verification (watsonx.ai LLM) β†’ supported/refuted/insufficient + citations
  5. 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               # IBM Speech to Text or Whisper (fallback)
β”‚  └─ 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

# 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)

  • ASR Agent (IBM STT): audio β†’ timestamped segments (+ diarization)
  • Claim Extractor (watsonx.ai): segments β†’ {id, text, speaker, start, end}
  • Retriever (Embeddings + FAISS + Rerank): claim β†’ top KB snippets
  • Verifier (watsonx.ai): claim + evidence β†’ verdict + rationale + citation_ids
  • Summarizer (watsonx.ai): executive summary + action items
  • Output: CallReport JSON; easy to render as PDF/HTML

πŸ›‘οΈ Notes on data & security

  • Do not commit .env or 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 version query 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=TRUE and OMP_NUM_THREADS=1.
  • JSON parse errors β†’ we use a robust extractor; check server logs [RAW OUTPUT].

πŸ“„ License

MIT (or your choice). See LICENSE.