Project 01 / MeetingBot
MeetingBot
An AI meeting assistant that turns a transcript or audio recording into a summary, action items, decisions and participants — with a question-answering chat grounded in what was actually said.
- Type
- AI application
- Year
- 2025
- Focus
- AI · NLP · Full Stack
- 01
Transcript or audio
Paste text or upload a recording
- 02
Whisper
Speech-to-text for audio
- 03
Speaker-turn chunking
Never splits mid-sentence
- 04
Embeddings + FAISS
Vector retrieval
- 05
OpenAI or local QA
Grounded answers
- 06
Meeting intelligence
Summary · actions · decisions · participants
Contents · 10 sections
MeetingBot takes a pasted transcript or an uploaded recording and, in one step, produces a meeting summary, a structured list of action items, the decisions that were confirmed, the participants — and a chat interface that answers questions from the transcript itself.
01
Problem
Meetings generate a lot of talk and very little structure. Decisions, owners and deadlines end up buried in a transcript that nobody wants to read twice, and a general-purpose chatbot asked about the meeting will happily answer from guesswork rather than from what was actually said.
02
What I built
A full-stack application with a Flask API and a Next.js / TypeScript / Tailwind CSS frontend:
- Transcript and audio ingestion — paste text, or upload a recording that is transcribed with Whisper before analysis. Uploads go through secure file-handling checks.
- Meeting intelligence — a summary, action items (task, owner and deadline where they are clearly stated), confirmed decisions and detected participants.
- Ask MeetingBot — a retrieval-augmented chat that answers questions about the meeting from the transcript.
- Two execution paths — OpenAI-powered when a key is configured, with a local-model fallback when it isn’t.
03
Technical approach
For question answering, the transcript is chunked along speaker turns, embedded with a sentence-transformer model, and indexed in FAISS. Retrieved chunks are returned in their original document order so the context the model reads stays coherent.
The retrieved context and the question then go to OpenAI when available, or to a local extractive question-answering model otherwise. Summaries, action items and decisions follow the same pattern: OpenAI when configured, local models and deterministic conversational patterns when not. Long transcripts are processed in chunks and merged rather than truncated.
04
Challenge
Evaluation surfaced a failure on a long transcript. MeetingBot answered a semantically direct question correctly, but failed a more generic question whose evidence sat deeper in the transcript.
The easy conclusion would have been “the model got it wrong”. The actual cause was retrieval and context coverage: similarity search ranked the direct question’s evidence highly, but the generic question didn’t match the relevant passage strongly enough, so the evidence never reached the model at all.
05
Engineering decisions
- D01
Diagnose the retrieval before blaming the model
When a generic question failed on a long transcript, I traced the failure to retrieval and context coverage — the evidence never reached the model — rather than treating it as a language-model problem.
- D02
Full transcript when it fits, ranked chunks plus neighbours when it doesn’t
The OpenAI path now sends the whole transcript when it fits within the context budget. When it doesn’t, it sends similarity-ranked chunks together with their neighbouring chunks, so nearby evidence isn’t cut off.
- D03
Chunk along speaker turns
Transcripts are split on speaker-turn and line boundaries with a one-line overlap, so an answer-bearing sentence is never split across two chunks.
- D04
Every AI feature has a local fallback
If the OpenAI key is missing, invalid or the call fails, MeetingBot falls back to local models, and each response states which mode answered.
- D05
Decline rather than guess
The local question-answering path rejects low-confidence answers and says it couldn’t find the answer in the meeting instead of inventing one.
06
Evaluation
Development is evaluation-driven. The failure above followed a deliberate loop:
- Discover — an evaluation question failed on a long transcript.
- Reproduce — the failure was isolated and reproduced.
- Diagnose — traced to retrieval/context coverage, not the language model.
- Fix — the OpenAI path uses the full transcript when it fits the context budget, and similarity-ranked chunks plus their neighbours when it doesn’t.
- Validate — the fix was verified against the evaluation and the test suite.
The suite currently stands at 79 passing tests and 2 expected-failure tests.
07
Results
- Passing tests
- 79
- Expected-failure tests
- 2
- Marked as expected failures in the test suite
08
Limitations
- No speaker diarization yet — participants are detected from explicit speaker labels in the transcript.
- No persistence yet — meetings are not stored between sessions.
- Backend meeting state is held in memory and is not designed for concurrent multi-user production use.
- The local fallback remains weaker than the OpenAI path on some generic long-transcript questions.
09
Lessons
- Answering one well-phrased question correctly proves very little. Generic, indirect questions are where retrieval weaknesses show up.
- When an AI system gives a wrong answer, the first question is what context the model actually saw.
10
Next steps
- Speaker diarization for recordings without speaker labels.
- Persistent storage for meetings and their outputs.
- Per-user meeting state so the backend can serve concurrent users.
- Closing the gap between the local fallback and the OpenAI path on long transcripts.
Stack
- Python
- Flask
- Whisper
- FAISS
- sentence-transformers
- OpenAI API
- Hugging Face Transformers
- PyTorch
- Next.js
- TypeScript
- Tailwind CSS
- pytest
Related work
All work- Project 02
Trash2Cash
User message → Intent extraction → Schema validation → Deterministic tools → Grounded phrasing → Local NLP fallback
Project 022025AI · NLP · Full StackTrash2Cash
An AI-powered recycling platform for Nigeria — estimate a cash reward for recyclables, find where to drop them off, and ask a grounded assistant that understands how Nigerians actually talk about waste.
Available for opportunitiesNigeria · Open to remote work