Extracts commitments from meeting transcripts (Zoom VTT), tracks follow-ups, and surfaces renegotiations via Discord. Built for CSE291P PA4.
Zoom VTT → Ingest → 4-stage LLM pipeline (Gemini) → Postgres + LEANN
↓
React dashboard ← FastAPI
↓
Discord bot (follow-ups)
Pipeline stages:
- Extract — parse commitments from transcript
- Resolve — match speakers to team members (fuzzy + Gemini)
- Follow-up — daily Celery beat posts
#commitmentsthread - Renegotiate — Discord reply triggers LLM renegotiation or dispute
RAG: LEANN indexes (transcripts + commitments) for semantic search and citation-backed dispute resolution.
| Layer | Tech |
|---|---|
| Backend | FastAPI, SQLAlchemy, Alembic, Celery |
| LLM | Google Gemini 2.5 Flash |
| DB | Postgres 16 + LEANN (vector search) |
| Queue | Redis + Celery beat |
| Bot | discord.py |
| Frontend | React + TypeScript + Vite |
| Deploy | Docker Compose |
cd accountability-engine
cp .env.example .env
# Set GEMINI_API_KEY, DISCORD_BOT_TOKEN, DISCORD_GUILD_ID, DISCORD_COMMITMENTS_CHANNEL_ID
docker compose build api frontend
docker compose up- API: http://localhost:8000/api/v1/health
- Frontend: http://localhost:5173
- Docs: http://localhost:8000/docs
| Variable | Required | Description |
|---|---|---|
API_KEY |
Yes | Header auth for all protected routes (X-API-Key) |
GEMINI_API_KEY |
Yes | Google AI Studio key |
DISCORD_BOT_TOKEN |
Yes* | Bot token from Discord developer portal |
DISCORD_GUILD_ID |
Yes* | Server ID (Developer Mode → right-click server) |
DISCORD_COMMITMENTS_CHANNEL_ID |
Yes* | Channel for follow-up posts |
GOOGLE_CLIENT_ID/SECRET |
No | Google Calendar OAuth |
DATABASE_URL |
Auto | Set by Docker Compose |
REDIS_URL |
Auto | Set by Docker Compose |
*Not required for local dev without Discord follow-ups.
# Start infra
docker compose up postgres redis -d
# Backend
cd accountability-engine/backend
pip install -e ".[dev]"
alembic upgrade head
uvicorn app.main:app --reload --port 8000
# Celery worker
celery -A app.workers.celery_app worker --loglevel=info
# Frontend
cd accountability-engine/frontend
npm install && npm run devUpload accountability-engine/fixtures/e2e_demo_meeting.vtt via the Ingest page. Tests speaker resolution, commitment extraction, RAG search, and dispute flows. See accountability-engine/DEPLOY.md for full walkthrough.
cd accountability-engine/backend
PYTHONPATH=. pytest tests/ -qmake figures # Mermaid → PNG via Kroki (requires curl)
make pdf # pdflatex main.tex (twice)| Figure | Shows |
|---|---|
figures/architecture.mmd |
Full system architecture |
figures/pipeline.mmd |
4-stage ingest pipeline |
figures/rag.mmd |
Transcript chat retrieval |
figures/guardrails.mmd |
Guardrails before Discord/chat output |