# azure-samples/ai-multi-agent-presentation-builder architecture

> Architecture diagram of the GitHub repository azure-samples/ai-multi-agent-presentation-builder, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/azure-samples/ai-multi-agent-presentation-builder
- Repository: https://github.com/azure-samples/ai-multi-agent-presentation-builder

## Overview

This is a Streamlit application for generating draft presentations through a Semantic Kernel multi-agent workflow. A user submits a theme; the orchestrator uses an Azure OpenAI model to define task-specific agents, which are assembled into a chat group with selection and termination strategies. Agents can use web search and a presentation plugin; the resulting PPTX is offered for download. The README also documents customizable prompts and templates. The excerpts show the main orchestration and export path; prompt rendering and plugin registration are visible, but detailed agent-to-agent collaboration behavior is not independently verified.

Main entry points: [`app.py`](https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/app.py) (Streamlit interface), [`src/mas.py`](https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/mas.py) (Expert agent builder), [`src/plugins/presentation.py`](https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/plugins/presentation.py) (Presentation plugin), [`main.py`](https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/main.py) (CLI interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experience"]
  node_streamlit["Streamlit interface<br/>[app.py]"]
  node_cli["CLI interface<br/>[main.py]"]
  node_download["Presentation download<br/>[app.py]"]
end

subgraph group_orchestration["Agent orchestration"]
  node_orchestrator["Agent planner<br/>[mas.py]"]
  node_planner_model{{"Planning model"}}
  node_prompt_templates["Prompt templates"]
  node_agent_builder["Expert agent builder<br/>[mas.py]"]
  node_chat_group["Agent chat group<br/>[mas.py]"]
  node_selection["Agent selection<br/>[mas.py]"]
  node_termination["Termination strategy<br/>[mas.py]"]
  node_expert_agents["Task-specific agents<br/>[mas.py]"]
end

subgraph group_capabilities["Agent capabilities"]
  node_azure_model{{"Azure OpenAI"}}
  node_web_search["Web search plugin"]
  node_bing{{"Bing search"}}
end

subgraph group_presentation["Presentation output"]
  node_presentation_plugin["Presentation plugin<br/>[presentation.py]"]
  node_templates["PPTX templates"]
  node_pptx["Generated PPTX"]
end

node_user(("Theme author"))

node_user -->|"submits theme"| node_streamlit
node_streamlit -->|"starts planning"| node_orchestrator
node_cli -->|"starts planning"| node_orchestrator
node_orchestrator -->|"requests agent plan"| node_planner_model
node_orchestrator -->|"renders prompt"| node_prompt_templates
node_orchestrator -->|"returns agent specs"| node_agent_builder
node_streamlit -->|"creates agents"| node_agent_builder
node_cli -->|"creates agents"| node_agent_builder
node_agent_builder -->|"builds agents"| node_expert_agents
node_agent_builder -->|"registers plugin"| node_web_search
node_web_search -->|"searches web"| node_bing
node_agent_builder -->|"registers plugin"| node_presentation_plugin
node_streamlit -->|"creates strategy"| node_selection
node_streamlit -->|"creates strategy"| node_termination
node_streamlit -->|"assembles group"| node_chat_group
node_cli -->|"assembles group"| node_chat_group
node_chat_group -->|"dispatches turns"| node_expert_agents
node_chat_group -->|"selects participant"| node_selection
node_chat_group -->|"checks completion"| node_termination
node_expert_agents -.->|"generates responses"| node_azure_model
node_expert_agents -.->|"may invoke"| node_web_search
node_expert_agents -.->|"may invoke"| node_presentation_plugin
node_presentation_plugin -->|"loads template"| node_templates
node_presentation_plugin -->|"writes deck"| node_pptx
node_streamlit -->|"offers download"| node_download
node_download -->|"reads file"| node_pptx

click node_streamlit "https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/app.py"
click node_cli "https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/main.py"
click node_orchestrator "https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/mas.py"
click node_prompt_templates "https://github.com/azure-samples/ai-multi-agent-presentation-builder/tree/main/src/prompts"
click node_agent_builder "https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/mas.py"
click node_chat_group "https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/mas.py"
click node_selection "https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/mas.py"
click node_termination "https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/mas.py"
click node_expert_agents "https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/mas.py"
click node_presentation_plugin "https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/plugins/presentation.py"
click node_templates "https://github.com/azure-samples/ai-multi-agent-presentation-builder/tree/main/templates"
click node_download "https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/app.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_streamlit,node_cli,node_download toneBlue
class node_orchestrator,node_planner_model,node_prompt_templates,node_agent_builder,node_chat_group,node_selection,node_termination,node_expert_agents toneAmber
class node_azure_model,node_web_search,node_bing toneMint
class node_presentation_plugin,node_templates,node_pptx toneRose
class node_user toneIndigo
```

## Components

### User experience

- [Streamlit interface](https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/app.py): `app.py`
- [CLI interface](https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/main.py): `main.py`
- [Presentation download](https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/app.py): `app.py`

### Agent orchestration

- [Agent planner](https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/mas.py): `src/mas.py`
- **Planning model**
- [Prompt templates](https://github.com/azure-samples/ai-multi-agent-presentation-builder/tree/main/src/prompts): `src/prompts`
- [Expert agent builder](https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/mas.py): `src/mas.py`
- [Agent chat group](https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/mas.py): `src/mas.py`
- [Agent selection](https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/mas.py): `src/mas.py`
- [Termination strategy](https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/mas.py): `src/mas.py`
- [Task-specific agents](https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/mas.py): `src/mas.py`

### Agent capabilities

- **Azure OpenAI**
- **Web search plugin**
- **Bing search**

### Presentation output

- [Presentation plugin](https://github.com/azure-samples/ai-multi-agent-presentation-builder/blob/main/src/plugins/presentation.py): `src/plugins/presentation.py`
- [PPTX templates](https://github.com/azure-samples/ai-multi-agent-presentation-builder/tree/main/templates): `templates`
- **Generated PPTX**

### Other components

- **Theme author**

## Connections

- Theme author → Streamlit interface: submits theme (evidence: `README.md`)
- Streamlit interface → Agent planner: starts planning (evidence: `app.py`)
- CLI interface → Agent planner: starts planning (evidence: `main.py`)
- Agent planner → Planning model: requests agent plan (evidence: `src/mas.py`)
- Agent planner → Prompt templates: renders prompt (evidence: `src/mas.py`)
- Agent planner → Expert agent builder: returns agent specs (evidence: `src/mas.py`)
- Streamlit interface → Expert agent builder: creates agents (evidence: `app.py`)
- CLI interface → Expert agent builder: creates agents (evidence: `main.py`)
- Expert agent builder → Task-specific agents: builds agents (evidence: `src/mas.py`)
- Expert agent builder → Web search plugin: registers plugin (evidence: `src/mas.py`)
- Web search plugin → Bing search: searches web
- Expert agent builder → Presentation plugin: registers plugin (evidence: `src/mas.py`)
- Streamlit interface → Agent selection: creates strategy (evidence: `app.py`)
- Streamlit interface → Termination strategy: creates strategy (evidence: `app.py`)
- Streamlit interface → Agent chat group: assembles group (evidence: `app.py`)
- CLI interface → Agent chat group: assembles group (evidence: `main.py`)
- Agent chat group → Task-specific agents: dispatches turns (evidence: `src/mas.py`)
- Agent chat group → Agent selection: selects participant (evidence: `src/mas.py`)
- Agent chat group → Termination strategy: checks completion (evidence: `src/mas.py`)
- Task-specific agents → Azure OpenAI: generates responses
- Task-specific agents → Web search plugin: may invoke
- Task-specific agents → Presentation plugin: may invoke (evidence: `src/mas.py`)
- Presentation plugin → PPTX templates: loads template (evidence: `src/plugins/presentation.py`)
- Presentation plugin → Generated PPTX: writes deck (evidence: `src/plugins/presentation.py`)
- Streamlit interface → Presentation download: offers download (evidence: `app.py`)
- Presentation download → Generated PPTX: reads file (evidence: `app.py`)
