Prerequisites: Docker, Docker Compose v2, Make.
git clone <repository-url>
cd "AmpUp-PPT-Assignment"Before deploying, create the environment files:
- Create
bot_service/src/backend/etc/.envbased onbot_service/src/backend/etc/env_sample(fill your keys like OPENAI_API_KEY, ANTHROPIC_API_KEY, database settings, etc.). - Create a project-root
.envbased on.env_sample(set values such asPGADMIN_DEFAULT_EMAILandPGADMIN_DEFAULT_PASSWORD).
# Deploy everything
make deploy_presentation_appAfter startup:
- Bot API Service: http://localhost:8084 (Swagger at http://localhost:8084/docs)
- PostgreSQL: localhost:5432
- PgAdmin: http://localhost:8021 (login with PGADMIN_DEFAULT_EMAIL/PGADMIN_DEFAULT_PASSWORD)
What make deploy_presentation_app runs under the hood:
- setup_network: creates Docker network
llm-networkif missing. - setup_volumes: creates external volumes
postgres_dataandpgadmin_dataif missing. - start_services:
docker compose -f docker-compose-services.yml up -dto start Postgres and PgAdmin. - start_main:
- Stops any existing main service (
docker compose -f docker-compose-main.yml down). - Prunes old Docker build caches (older than 10 days).
- Builds and starts the main API (
docker compose -f docker-compose-main.yml up --build -d). - Waits briefly for health checks.
- Stops any existing main service (
Generate professional PowerPoint presentations from a topic using an AI-powered planner/summarizer pipeline.
- User creates credentials via the Users API (HTTP Basic Auth is used with email as the username).
- The Slides Generator pipeline runs when you call
/slides/generate:- Planner agent analyzes your inputs (topic, style, layout preferences) and proposes a presentation title plus a list of slide plans (search questions + layout plan for each slide).
- Summarizer agent runs in parallel for each planned slide, producing concise content, suggested layout type, and citations.
- The PowerPoint generator compiles all slide contents, applies theme colors and fonts, and saves a
.pptxfile. The presentation status in the database is updated from processing → completed/failed.
See detailed endpoint reference in docs/API_SPEC.md.
- Create a user
curl -X POST "http://localhost:8081/api/v1/create_user" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"username": "janedoe",
"password": "strong-password"
}'- Generate a presentation
curl -X POST "http://localhost:8081/api/v1/slides/generate" \
-H "Content-Type: application/json" \
-d '{
"topic": "AI Agent Use Cases in Healthcare Sector",
"num_slides": 8,
"style": "professional",
"predefined_theme": "professional_blue"
}'- Check status and download
# Status
curl "http://localhost:8081/api/v1/slides/<presentation_id>"
# Download when completed
curl -o presentation.pptx "http://localhost:8081/api/v1/slides/<presentation_id>/download"- HTTP Basic Auth is supported for User and Slide-related endpoints. Use the email as the HTTP Basic username and the user password as the password.
Docs are available at http://localhost:8081/docs and http://localhost:8081/redoc.
bot_service/src/backend/
├── slides/ # Slide endpoints and generation logic
├── user/ # Users and basic auth helpers
├── LLM/ # LLM service integration
├── database/ # DB services and models
├── common/ # Config, logging, utils
└── main.py # FastAPI bootstrap
Generated .pptx files are saved under bot_service/src/backend/generated_presentations/.
- Full API reference:
docs/API_SPEC.md - Themes, colors, and layouts:
GET /api/v1/slides/options