Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎬 Meeting Intelligence

Turn any meeting recording into a title, summary, action items, decisions, and a chatbot β€” via a FastAPI backend and a Streamlit frontend.

Meeting Intelligence

Python FastAPI Streamlit LangChain Mistral AI Docker License Status

Last Commit Issues Stars


πŸ“– Overview

Transform meeting recordings into structured knowledge with AI.

Meeting Intelligence is an end-to-end AI application that converts meeting recordings from local files or YouTube videos into searchable, actionable insights.

Instead of replaying long meetings or relying on incomplete notes, the application automatically transcribes conversations, generates professional summaries, extracts action items and key decisions, and creates a Retrieval-Augmented Generation (RAG) knowledge base for intelligent follow-up questions.

Built with a production-ready architecture, the project exposes all functionality through a documented FastAPI REST API and includes a modern Streamlit interface, making it easy to integrate into internal tools, workflows, or customer-facing applications.


✨ Key Features

Category Capability
πŸŽ₯ Flexible Input Upload local audio/video files or analyze meetings directly from YouTube URLs
🌍 Multi-Language Transcription Faster-Whisper for English and Sarvam AI for Hinglish conversations
🧠 AI-Powered Summarization Generates concise executive summaries using a map-reduce pipeline with Mistral AI
πŸ“‹ Meeting Intelligence Automatically extracts titles, action items, key decisions, and open questions
πŸ” RAG Chat Assistant Ask natural-language questions and receive answers grounded only in the meeting transcript
⚑ Asynchronous Processing Long-running transcription jobs execute in the background while the API immediately returns a job ID
πŸ”’ Meeting Isolation Every meeting maintains its own vector database to ensure retrieval is scoped to that meeting only
🌐 REST API Fully documented FastAPI endpoints with interactive Swagger/OpenAPI documentation
πŸ–₯️ Streamlit Frontend Clean, responsive web interface for uploading recordings and interacting with the AI assistant
🐳 Containerized Deployment Separate Dockerfiles and Docker Compose configuration for frontend and backend
πŸ§ͺ Testable Architecture Offline unit tests with mocked AI services for reliable development and CI/CD

πŸš€ What This Project Delivers

  • πŸŽ™οΈ Automatic meeting transcription
  • πŸ“ Executive-quality summaries
  • βœ… Action item extraction
  • πŸ“Œ Key decision tracking
  • ❓ Open question identification
  • πŸ’¬ Context-aware RAG chatbot
  • πŸ”Ž Semantic search over meeting transcripts
  • 🌐 Production-ready REST API
  • 🐳 Docker-based deployment
  • πŸ“š Interactive API documentation

πŸš€ Demo

Service Link
Frontend <your-streamlit-deployment-url>
Backend API <your-api-deployment-url>
API Docs (Swagger) <your-api-deployment-url>/docs

πŸ“Έ Screenshots

🏠 Home β€” Upload & Analyze Documents

Home Page

The landing page provides a clean interface for uploading PDF documents and interacting with the AI-powered RAG chatbot. Users can quickly process documents, explore extracted content, and begin asking natural language questions within seconds.

πŸ“„ Document Processing Results

Processing Results

Displays the extracted document content, processing status, and indexing results after ingestion. Users can verify successful document parsing before starting a conversation with the chatbot.

πŸ€– Intelligent RAG Chat Interface

RAG Chat Interface

Ask questions about your uploaded documents using natural language. The Retrieval-Augmented Generation (RAG) pipeline retrieves the most relevant document chunks and generates accurate, context-aware responses with source-backed information.

πŸ“š Interactive API Documentation

API Documentation

Comprehensive FastAPI-powered API documentation for testing document upload, retrieval, and chat endpoints. Developers can explore request schemas, execute endpoints directly, and integrate the backend into external applications.


πŸ— Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      HTTP (multipart / JSON)       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Streamlit UI  β”‚ ────────────────────────────────▢ β”‚     FastAPI Service   β”‚
β”‚     (app.py)    β”‚ ◀──────────────────────────────── β”‚        (api/)         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        JSON (status / result)      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                                    β”‚
                                                       background thread pool
                                                                    β”‚
                                                                    β–Ό
                                                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                                        β”‚      core pipeline     β”‚
                                                        β”‚  audio β†’ transcript β†’  β”‚
                                                        β”‚  summary/extraction β†’  β”‚
                                                        β”‚  vector index β†’ RAG    β”‚
                                                        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ›  Tech Stack

Category Technologies
Backend FastAPI, Uvicorn, Python 3.11
Frontend Streamlit
LLM Orchestration LangChain, langchain-mistralai
AI / ML Mistral AI (summarization, extraction, RAG), Faster-Whisper (English STT), Sarvam AI (Hinglish STT), Sentence-Transformers (all-MiniLM-L6-v2)
Vector Database ChromaDB
Audio Processing pydub, yt-dlp, ffmpeg
Networking requests, tenacity (retries)
Testing pytest
Deployment Docker, Docker Compose

πŸ“‚ Project Structure

meeting-intelligence/
β”œβ”€β”€ app/                      # Pipeline library (framework-agnostic)
|   β”œβ”€β”€ api/                       # FastAPI service
|   β”‚   β”œβ”€β”€ main.py                  # App instance, CORS, error handlers
|   β”‚   β”œβ”€β”€ routes.py                # /api/meetings endpoints
|   β”‚   β”œβ”€β”€ job_store.py             # In-memory job queue + background execution
|   β”‚   └── schemas.py               # Pydantic request/response models
|   |
|   β”œβ”€β”€ core/
|   β”‚   β”œβ”€β”€ config.py               # Centralized settings, read once from env
|   β”‚   β”œβ”€β”€ exceptions.py           # Typed exception hierarchy
|   β”‚   β”œβ”€β”€ llm_factory.py          # Shared, cached Mistral client
|   β”‚   β”œβ”€β”€ logging_config.py       # Central logging setup
|   β”‚   β”œβ”€β”€ pipeline.py             # Orchestrates the full pipeline
|   β”‚   └── prompts.py              # Centralises the prompts used
|   |
|   β”œβ”€β”€ services/
|   β”‚   β”œβ”€β”€ audio_processor.py      # Download / convert / chunk audio
|   β”‚   β”œβ”€β”€ extractor.py            # Action items / decisions / questions
|   β”‚   β”œβ”€β”€ rag_engine.py           # Question-answering over a meeting
|   β”‚   β”œβ”€β”€ summarizer.py           # Title + map-reduce summary
|   β”‚   β”œβ”€β”€ transcriber.py          # Whisper (English) + Sarvam (Hinglish)
|   β”‚   └── vector_store.py         # Per-meeting Chroma index
|   |
|   └── __init__.py
|
β”œβ”€β”€ frontend/
|   └── streamlit_app.py             # Streamlit frontend (calls the API only)
β”‚
β”œβ”€β”€ images/                    # README assets (screenshots, banner, diagrams)
β”œβ”€β”€ main.py                    # CLI entry point (runs the pipeline directly)
|
β”œβ”€β”€ .env
β”œβ”€β”€ .env.example
β”œβ”€β”€ .gitignore
β”œβ”€β”€ LICENSE
β”œβ”€β”€ README.md
└── requirements.txt

βš™οΈ Installation

# 1. Clone the repository
git clone https://github.com/sharif-abusad/meeting-intelligence.git
cd meeting-intelligence

# 2. Create and activate a virtual environment
python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate

# 3. Install dependencies
pip install -r requirements.txt

# 4. Configure environment variables
cp .env.example .env
# edit .env and set MISTRAL_API_KEY (and SARVAM_API_KEY if needed)

ffmpeg must also be installed and on your PATH (required for audio conversion):

# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows (via choco)
choco install ffmpeg

Run the backend:

uvicorn api.main:app --reload --port 8000

Run the frontend (in a second terminal):

streamlit run app.py

Open the URL Streamlit prints β€” typically http://localhost:8501.


πŸ“‘ API Documentation

Interactive Swagger docs are auto-generated at /docs once the API is running (e.g. http://localhost:8000/docs).

Method Endpoint Description
GET /api/health Health check
POST /api/meetings Submit a job (youtube_url or file, plus language, chunk_minutes, build_index). Returns 202 with a job_id.
GET /api/meetings/{job_id}/status Poll job status: queued / processing / completed / failed
GET /api/meetings/{job_id} Full result once completed: title, transcript, summary, action items, decisions, open questions
POST /api/meetings/{job_id}/ask Ask a follow-up question ({"question": "..."}), answered via RAG over the meeting transcript

Example Requests

curl -X POST http://localhost:8000/api/meetings \
  -F "youtube_url=https://youtu.be/VIDEO_ID" \
  -F "language=english"
# β†’ {"job_id": "a1b2c3d4e5f6", "status": "queued"}

curl http://localhost:8000/api/meetings/a1b2c3d4e5f6/status
curl http://localhost:8000/api/meetings/a1b2c3d4e5f6

curl -X POST http://localhost:8000/api/meetings/a1b2c3d4e5f6/ask \
  -H "Content-Type: application/json" \
  -d '{"question": "What did we decide about the launch date?"}'

πŸ”„ Processing Pipeline

                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   Input ───────▢│ Audio Source β”‚  (local file or YouTube URL)
                 β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
                        β–Ό
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚  Download /  β”‚
                 β”‚  Convert to  β”‚
                 β”‚  WAV, chunk  β”‚
                 β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
                        β–Ό
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚ Transcriptionβ”‚ ── Whisper (English) / Sarvam (Hinglish)
                 β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
                        β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
          β–Ό             β–Ό                 β–Ό
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚   Title +   β”‚β”‚  Action     β”‚β”‚  Vector Index  β”‚
   β”‚  Summary    β”‚β”‚  Items /    β”‚β”‚  (per-meeting  β”‚
   β”‚ (map-reduce)β”‚β”‚  Decisions /β”‚β”‚   Chroma store)β”‚
   β”‚             β”‚β”‚  Questions  β”‚β”‚                β”‚
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
                                            β–Ό
                                   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                   β”‚   RAG Q&A on   β”‚
                                   β”‚  the transcriptβ”‚
                                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ—Ί Future Improvements

  • Swap the in-memory job store for Celery/RQ + Redis for horizontal scaling
  • WebSocket/SSE push instead of polling for job status
  • Speaker diarization
  • Multi-file / batch upload support
  • User authentication (API keys or OAuth) in front of the FastAPI service
  • CI/CD pipeline (lint, test, build, deploy on push)
  • Structured evaluation suite (WER, summary quality, RAG relevance)
  • Persistent job store with retry/resume on failure

🀝 Contributing

Contributions are welcome.

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/your-feature
  3. Commit your changes: git commit -m "Add your feature"
  4. Run the test suite: pytest
  5. Push to your branch: git push origin feature/your-feature
  6. Open a Pull Request describing the change and its motivation

Please keep pull requests focused and add/update tests for any behavioral change.


πŸ“„ License

This project is licensed under the MIT License β€” see LICENSE for details.


πŸ‘€ Author

Sharif Abusad

GitHub LinkedIn

If you found this project useful, consider giving it a ⭐ on GitHub β€” it helps a lot!


Made with ❀️ using Python and Open Source Technologies

About

Production-ready AI Meeting Intelligence platform featuring multilingual transcription, LLM-powered summarization, structured meeting insights, and Retrieval-Augmented Generation (RAG) chat.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages