TODO: DONE - * Fix integration w/threads (Chris) DONE - * Make streamlit start/stop to run record/transcribe from UI (Chris) DONE - * Summarize minute chunks with local llm (Chris) DONE - * Show minute-summaries rolling (Chris) DONE - * Only do big LLM summary at the end (Chris) DONE - * Spinners and lock for clearer "processing" signaling DONE - * Download buttons for summary/transcript working DONE - * Upload button/storage for meeting notes path/files
Left Off
-
Bug- debug the summarizer to ensure prompt selection by timeframe is working
-
Bug- final summarization not working
-
Upload button/storage for meeting context path/files
-
Clean up file-system/archiving and make a nice listing on a second tab to view prior meetings
-
Summary extracted to json used for the render & possibly graph storage (Rick)
-
Graph integration of meetings (Rick)
-
Graph integration of documentation
Meeting Buddy is an automated system for recording, transcribing, and generating meeting notes in real-time. It captures audio in 15-second intervals, transcribes the audio using Whisper, and generates comprehensive meeting notes using OpenAI's GPT models.
- Real-time audio recording and transcription
- Automatic meeting notes generation
- Live transcript and meeting notes viewing
- Question detection for interviews
- Support for behavioral, programming, and system design questions
- Python 3.12.7
- Conda package manager
- OpenAI API key
- FFmpeg (for Whisper transcription)
export PATH="$(brew --prefix)/opt/[email protected]/libexec/bin:$PATH"
- Create a new conda environment:
python -m venv venv
source venv/bin/activate
- Install the required packages:
pip install -r requirements.txt
- Set up your OpenAI API key:
export OPENAI_API_KEY='your-api-key-here'
Program | Description | How to Run |
---|---|---|
record.py | Records audio in 15-second intervals | python record.py |
transcribe.py | Transcribes audio files using Whisper | python transcribe.py |
combine_all.py | Combines transcription files | python combine_all.py |
create_meeting_notes.py | Generates meeting notes using GPT | python create_meeting_notes.py |
view.py | Web interface for viewing meeting notes | streamlit run view.py |
transcripts_viewer.py | Web interface for viewing transcripts | streamlit run transcripts_viewer.py |
question_detector.py | Detects interview questions | python question_detector.py |
answer_creator.py | Generates answers for detected questions | python answer_creator.py |
answer_viewer.py | Web interface for viewing answers | streamlit run answer_viewer.py |
- Set up a .env file in the project root:
CHUNK_RECORD_DURATION=2
WATCH_DIRECTORY=../../data
OUTPUT_DIRECTORY=../../output
- Set up your environment:
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
source env.sh
There are two ways to start the application:
- Using the shell script (recommended):
./run_app.sh
- Using Python directly:
python app/mb/run_app.py
Both methods will start both the WebSocket service and the Streamlit interface. The application will be available at http://localhost:8501
For development, you might want to run the service and UI separately:
- Start the WebSocket service:
python app/mb/service.py
- In a separate terminal, start the Streamlit interface:
streamlit run app/pages/home.py
This setup allows you to modify and restart either component independently during development.
For testing and debugging the WebSocket service, you can use the included test client. The client allows you to manually interact with a running service instance.
Make sure the service is running first (python -m app/mb/service.py
), then start the test client:
python -m app.mb.socket_test
Available commands in interactive mode:
start
- Start recordingstop [meeting_name]
- Stop recording (meeting name optional)summarize <text>
- Request summary of provided textlisten
- Start listening for messages in backgroundstoplisten
- Stop listening for messagesquit
- Exit the program
Example usage:
Enter command> start
Enter command> listen
Received: {"type": "transcription", "text": "..."}
Enter command> stoplisten
Enter command> stop my_meeting
Enter command> quit
By default, the client connects to ws://localhost:8765
. You can specify a different URI using the --uri
argument:
python -m app.mb.socket_test --uri ws://localhost:9000