Spaces:
Sleeping
title: Post Conference Report
emoji: 🌖
colorFrom: purple
colorTo: green
sdk: docker
pinned: false
Post Conference Report Demo
A web app that transforms raw conference notes into structured markdown reports via a streaming LLM API.
Stack: FastAPI + vanilla JS/Tailwind CSS frontend, Haystack AI for LLM orchestration, NVIDIA Nemotron-3 Super 120B model via NVIDIA API. The Docker image also bundles the google-drive-mcp server as a background process.
Prerequisites
NVIDIA_API_KEY— set in a.envfile at the project root- Google Drive OAuth credentials (for the MCP server) — see Google Drive MCP setup below
Running locally
# Install dependencies
uv sync
# Run the app (port 7860)
uv run main.py
Helper scripts
Download YouTube transcripts
Downloads transcripts for one or more YouTube videos and saves each as a .docx file named after the video title. Prefers manually-created transcriptions; falls back to auto-generated if unavailable.
# Single video
uv run scripts/download_transcripts.py https://www.youtube.com/watch?v=VIDEO_ID
# Playlist (downloads all videos)
uv run scripts/download_transcripts.py "https://www.youtube.com/playlist?list=PLAYLIST_ID"
# Mix of playlists and individual videos
uv run scripts/download_transcripts.py \
"https://www.youtube.com/playlist?list=PLAYLIST_ID" \
https://youtu.be/VIDEO_ID \
-o ./my-transcripts
# Verbose logging
uv run scripts/download_transcripts.py https://youtu.be/VIDEO_ID -v
Output files land in ./transcripts/ by default. Each file is named after the video title (e.g. My_Talk_Title.docx). Exit code is non-zero if any video failed.
Running with Docker
./run.sh
run.sh builds the image and starts the container. It also mounts your local Google Drive MCP credentials and tokens automatically if they exist at ~/.config/google-drive-mcp/.
To run manually:
docker build -t post-conference-report-demo .
docker run --rm -p 7860:7860 --env-file .env \
-v ~/.config/google-drive-mcp/gcp-oauth.keys.json:/root/.config/google-drive-mcp/gcp-oauth.keys.json:ro \
-v ~/.config/google-drive-mcp/tokens.json:/root/.config/google-drive-mcp/tokens.json \
post-conference-report-demo
Google Drive MCP setup
The Docker image installs @piotr-agier/google-drive-mcp globally and starts it in the background on container startup. It requires Google OAuth 2.0 credentials.
1. Create OAuth credentials
- Open Google Cloud Console and create (or select) a project
- Enable the following APIs: Drive, Docs, Sheets, Slides, Calendar
- Create an OAuth 2.0 Desktop app credential and download the JSON file
- Place it at
~/.config/google-drive-mcp/gcp-oauth.keys.json
2. Authenticate (once, on the host)
npx @piotr-agier/google-drive-mcp auth
This opens a browser for the OAuth flow and writes the token to ~/.config/google-drive-mcp/tokens.json. The token file is mounted into the container by run.sh and persists across container restarts.
Alternative: pass credentials via environment variables
Instead of volume mounts you can supply the JSON file contents directly as environment variables — useful for cloud deployments (HuggingFace Spaces secrets, Kubernetes secrets, etc.).
Add these to your .env file:
GOOGLE_DRIVE_OAUTH_KEYS_JSON={"installed":{"client_id":"...","client_secret":"...",...}}
GOOGLE_DRIVE_TOKENS_JSON={"access_token":"...","refresh_token":"...",...}
On container startup, entrypoint.sh writes the values to temp files and points the MCP server at them. Volume mounts take precedence if both are present.
MCP server logs
Inside a running container:
docker exec <container-id> cat /var/log/google-drive-mcp.log