Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
f1aec4e
fix: resolve test collection errors and add ADR for declarative config
marktayl1 Apr 23, 2026
e12ff2b
Getting image to generate
TravisHilbert Apr 24, 2026
a093743
Added content gen
TravisHilbert Apr 27, 2026
493ad43
added mcp server for content gen
TravisHilbert Apr 27, 2026
e8f514c
chore: remove tracked artifacts and stale files
marktayl1 Apr 28, 2026
f8f0779
chore: remove duplicate test tree src/backend/tests/
marktayl1 Apr 28, 2026
f082da8
chore: align .env.sample with actual code usage
marktayl1 Apr 28, 2026
bf9c073
chore: remove stale Docker/infra artifacts
marktayl1 Apr 28, 2026
fbd5784
chore: consolidate pytest.ini + .coveragerc into root pyproject.toml
marktayl1 Apr 28, 2026
c58c022
test: add foundry integration tests and fix unit test patching
marktayl1 Apr 29, 2026
49a2c2f
fix(foundry_agent): omit temperature for gpt-5/o-series models
TravisHilbert Apr 30, 2026
ecfb358
feat(infra): deploy gpt-5-mini and gpt-image-1 models
TravisHilbert Apr 30, 2026
700c44f
Merge pull request #962 from microsoft/feature/TAS27-gpt5mini-imageag…
marktayl1 Apr 30, 2026
b1ecaaa
Content gen updates
TravisHilbert May 4, 2026
fbd733b
refactor: code clarity tasks 1-5 and 8
marktayl1 May 4, 2026
25f18b6
Merge branch 'feature/TAS27' of https://github.com/microsoft/Multi-Ag…
marktayl1 May 4, 2026
82c1fa1
feat: port magentic_agents to GA agent_framework 1.2.2 agents package
marktayl1 May 6, 2026
ec1b848
refactor: remove guard-rail and low-value tests
marktayl1 May 6, 2026
939b4c1
feat(phase3): port orchestration layer and models package
marktayl1 May 6, 2026
9f4d2da
feat(phase4): add models/messages.py and models layer tests (48 passing)
marktayl1 May 6, 2026
efde543
feat(phase5): add services layer and services test suite (125 passing)
marktayl1 May 6, 2026
2b061b4
feat(phase6): add api/ and callbacks/ layers with test suite (43 pass…
marktayl1 May 6, 2026
527f24e
feat(phase7): integration smoke tests for AgentTemplate (7 tests, ski…
marktayl1 May 6, 2026
fe75878
fix: resolve sys.modules pytest_plugins pollution and AIProjectClient…
marktayl1 May 6, 2026
e552131
fix: migrate orchestration to MAF 1.2.2 GA API and resolve all startu…
marktayl1 May 6, 2026
bfc1ec8
feat: per-agent streaming with executor_completed final output
marktayl1 May 7, 2026
3fc5d0c
fix: defer agent headers to first output chunk, update RFP instructions
marktayl1 May 7, 2026
6817fac
feat: show agent names in plan steps, UI polish
marktayl1 May 7, 2026
f6fb67a
feat: add UserInteractionAgent, workflow blueprints, and anti-fabrica…
marktayl1 May 14, 2026
50dfee7
fix: HR onboarding multi-agent scenario completes correctly with MCP …
marktayl1 May 14, 2026
6b8d6ef
feat: add Foundry IQ FileSearchTool for retail agents with vector sto…
marktayl1 May 18, 2026
a00f331
feat(kb): sync Azure AI Search KB between portal and client-side
marktayl1 May 19, 2026
6770bf2
fix: split retail KB per agent and add stale-KB detection in agent_te…
marktayl1 May 19, 2026
a2e301e
feat: use o4-mini reasoning model for orchestrator manager
marktayl1 May 19, 2026
c03c5e9
feat(orchestration): JSON plan format for o4-mini reasoning model
marktayl1 May 20, 2026
fc7f35f
fix: F1 tool-history-leak patch + stall detection override for user c…
marktayl1 May 20, 2026
f9f6269
fix: scroll to final result start + enforce blueprint-only HR steps
marktayl1 May 20, 2026
961f8c4
Adding content pack profiles
TravisHilbert May 20, 2026
67b68fa
updated json configs
TravisHilbert May 20, 2026
a6ede6b
fix(tests): resolve all 12 backend test failures
marktayl1 May 21, 2026
e71fc4c
changes to get content gen working and deployment changes
TravisHilbert May 23, 2026
bd486e9
feat: implement HITL via @tool(approval_mode) replacing UserInteracti…
marktayl1 May 24, 2026
44c66af
chore: remove dead code, suppress lint warnings, add MAF capability c…
marktayl1 May 24, 2026
2aa343d
feat: improve HR agent system prompts with re-invocation checks and v…
marktayl1 May 24, 2026
5767fa1
docs: clarify why magentic_duplicate_fc_id patch remains needed
marktayl1 May 24, 2026
ca1e761
chore: remove dead AGENT_TEAM_FILE and unused REASONING_MODEL_NAME fr…
marktayl1 May 24, 2026
4d54180
chore: remove dead modules azure_config.py and orchestration/patches.py
marktayl1 May 24, 2026
cfc2465
fix: tech_support blueprint - use provided answers instead of re-asking
marktayl1 May 24, 2026
ed538d3
chore: add .venv-* pattern to .gitignore
marktayl1 May 24, 2026
3a435c4
chore: upgrade agent-framework from 1.2.2 to 1.6.0
marktayl1 May 26, 2026
982338c
merge: resolve conflicts - keep our patches path and hr.json
marktayl1 May 26, 2026
bdf1120
fix: resolve type errors and lint warnings after agent-framework 1.6.…
marktayl1 May 26, 2026
3e87955
refactor: restructure team configs and simplify agent factory for fra…
marktayl1 May 26, 2026
dec443a
fix(mcp): route generated images through backend proxy for browser ac…
marktayl1 May 27, 2026
63d3ff9
fix(infra): deployment readiness - remove Key Vault, fix circular dep…
marktayl1 May 27, 2026
ec608e8
fix(infra): swap azd default to main.bicep, port fixes to main_custom
marktayl1 May 27, 2026
aa9e5df
fix(infra): clean up Bicep linter warnings in both templates
marktayl1 May 27, 2026
cd4038b
fix(infra): update image model to gpt-image-1.5 in main.bicep
marktayl1 May 27, 2026
4c6720b
feat: add interactive post-deploy script and consolidate scripts
marktayl1 May 27, 2026
3f80586
fix: Docker build fixes and optional AppInsights
marktayl1 May 27, 2026
ad7838c
chore: gitignore compiled ARM template and preflight artifacts
marktayl1 May 27, 2026
87bd074
fix(post_deploy): fail script on step errors and add azure-ai-project…
marktayl1 May 28, 2026
533d74e
fix(agents): patch stale KB toolbox connection at runtime
marktayl1 May 31, 2026
456b310
fix(infra): switch search connection to AAD auth and add KB RBAC roles
marktayl1 Jun 1, 2026
2a1766e
fix(orchestration): remove UserInteractionAgent routing from HITL pro…
marktayl1 Jun 1, 2026
631977e
Deployment Changes for to pull ACR images from Marks ACR.
TravisHilbert Jun 1, 2026
f5e9497
docs: update README with Foundry branding, AI Search pricing, and con…
marktayl1 Jun 2, 2026
35d5eef
style(mcp-server): remove emoji icons from log messages
marktayl1 Jun 2, 2026
187c643
Merge branch 'feature/TAS27' of https://github.com/microsoft/Multi-Ag…
marktayl1 Jun 2, 2026
1a47e6a
updated the post deployment script
Dhruvkumar-Microsoft Jun 2, 2026
af3f573
Added better readme instructions to create content packs
TravisHilbert Jun 2, 2026
24cfc7c
Merge branch 'feature/TAS27' of https://github.com/microsoft/Multi-Ag…
TravisHilbert Jun 2, 2026
0c91d01
Merge pull request #1015 from microsoft/psl-infrachangesForCG
TravisHilbert Jun 2, 2026
b6cb7d2
added some speckit agent defs so users can create new content packs b…
TravisHilbert Jun 2, 2026
f584927
Merge branch 'feature/TAS27' of https://github.com/microsoft/Multi-Ag…
TravisHilbert Jun 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
25 changes: 0 additions & 25 deletions .coveragerc

This file was deleted.

273 changes: 273 additions & 0 deletions .github/agents/speckit.contentpack.agent.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,273 @@
---
description: Create a new content pack (agent team + data + knowledge base) using the reference template and step-by-step guide.
---

# Content Packs

Optional, drop-in extensions to the Multi-Agent Custom Automation Engine. A pack
ships everything needed to add a domain-specific agent team **without touching
core code**.

The core solution works fine when the `content_packs/` folder is empty or absent.

---

## Folder Structure

```
content_packs/
└── <pack_name>/
├── pack.json # optional — declares search indexes + blob uploads
├── agent_teams/
│ └── *.json # required — one or more team config files (any name)
├── datasets/ # optional — source data for grounding
│ ├── data/*.csv
│ └── docs/*.pdf
└── scripts/ # optional — pack-local utilities
```

- `<pack_name>` should be lowercase snake_case (e.g. `pet_food`, `legal_review`).
- JSON files inside `agent_teams/` can be named anything — the upload script
globs all `*.json` files in that directory.

---

## Designing Your Agent Team

Every pack needs at least one team config JSON in `agent_teams/`. The agents you
create should be tailored to your domain — there is no fixed pattern. Consider:

**What does the user need?** Design agents around the tasks your users will
perform, not around a template. Ask yourself:

| Question | Design decision |
|----------|----------------|
| Does the team need to look up data? | Add a **ResearchAgent** with `use_knowledge_base: true` |
| Does it need to generate images? | Add an agent with `use_toolbox: true` and the appropriate `toolbox_filter` |
| Should it ask the user clarifying questions? | Set `user_responses: true` on the relevant agent |
| Are there multiple distinct tasks? | Add specialist agents and a **TriageAgent** to route between them |
| Is it a simple Q&A over data? | A single agent with KB access may be enough — no triage needed |

**Examples from this repo:**

| Pack | Agents | Why |
|------|--------|-----|
| `content_gen` | Triage → Planning → Research → TextContent → ImageContent → Compliance | Complex creative workflow with multiple output types |
| `contract_compliance` | Triage → Research → Analysis | Document review with KB lookup |
| `hr_onboarding` | Single team (no KB) | Workflow-only, no data grounding needed |

**Key rules:**
- Every agent needs a unique `input_key` (used for routing between agents).
- The `team_id` must be a valid UUID using only hex characters (0-9, a-f).
Use the pattern `00000000-0000-0000-0000-00000000NNNN` where NNNN is unique.
- At least one `starting_tasks` entry is required (the example prompt shown in the UI).

### Required Fields (validation will reject uploads without these)

**Team-level:**
```jsonc
{
"id": "1",
"team_id": "00000000-0000-0000-0000-000000000008",
"name": "Your Team Name",
"status": "visible", // REQUIRED — team won't appear in UI without this
"deployment_name": "gpt-4.1-mini",
...
}
```

**Each agent must include `type`:**
```jsonc
{
"input_key": "my_agent",
"type": "", // REQUIRED — empty string is fine, but field must exist
"name": "MyAgent",
...
}
```

**Each starting task must include `created`, `creator`, `logo`:**
```jsonc
"starting_tasks": [
{
"id": "task-1",
"name": "Example Task",
"prompt": "A sample prompt users can click to start",
"created": "", // REQUIRED — empty string is fine
"creator": "", // REQUIRED — empty string is fine
"logo": "" // REQUIRED — empty string is fine
}
]
```

> Missing any of these fields results in a 400 error during upload.
> Use an existing pack (e.g. `hr_onboarding/agent_teams/hr.json`) as a
> reference for the full required schema.

---

## Data & Knowledge Bases

If your agents need to search domain-specific data, you need three things wired together:

```
CSV/PDF ──► AI Search Index ──► Knowledge Base (MCP) ──► Agent
(pack.json) (seed_knowledge_bases.py) (agent_teams/*.json)
```

### Step 1 — Add your data

Put source files in `datasets/data/`. Supported formats:

| Format | How it's indexed |
|--------|-----------------|
| CSV | One document per row. Columns become searchable fields. |
| PDF/DOCX | Uploaded to blob; use `blob_indexes` in `pack.json` for document-crack indexing. |

### Step 2 — Create `pack.json`

```jsonc
{
"name": "your_pack",
"description": "What this pack does",
"search_indexes": [
{
"index_name": "your-pack-data-index",
"csv_path": "datasets/data/your_data.csv",
"key_field": "id",
"title_field": "product_name"
}
],
"blob_uploads": [
{
"container": "your-pack-dataset",
"source": "datasets/data",
"pattern": "*.csv"
}
]
}
```

The `index_name` must be globally unique on your search service and will be
referenced in the KB registration.

### Step 3 — Register the Knowledge Base

Add an entry to `infra/scripts/seed_knowledge_bases.py` in the `KNOWLEDGE_BASES`
dict. Place it before the `# ── Example Pack ──` comment block:

```python
# ── Your Pack ──
"your-pack-data-kb": {
"description": "What this KB provides",
"model": {
"kind": "azureOpenAI",
"azureOpenAIParameters": {
"resourceUri": AI_SERVICES_ENDPOINT,
"deploymentId": "gpt-4.1-mini",
"modelName": "gpt-4.1-mini",
},
},
"sources": [
{
"name": "your-pack-data-ks",
"description": "What the source data contains",
"index_name": "your-pack-data-index", # Must match pack.json
"searchable_fields": ["content", "title"],
},
],
},
```

**Naming convention (must be consistent across files):**

| Item | Pattern | Example |
|------|---------|---------|
| KB name (dict key) | `<pack>-<purpose>-kb` | `pet-food-catalog-kb` |
| Knowledge Source name | `<pack>-<purpose>-ks` | `pet-food-catalog-ks` |
| Search index name | `<pack>-<purpose>-index` | `pet-food-catalog-index` |

### Step 4 — Connect agents to the KB

In your team config JSON, set these fields on the agent that needs search:

```jsonc
"use_knowledge_base": true,
"knowledge_base_name": "your-pack-data-kb" // Must match the key in seed_knowledge_bases.py
```

The agent's `system_message` should instruct it to **always use the search tool**
and **never hallucinate data**.

---

## Registering in the Deployment Script

Edit `infra/scripts/Selecting-Team-Config-And-Data.ps1`. Search for `NEW CONTENT PACK`
— each insertion point has a comment template. There are **4 things** to do:

| # | What | Where |
|---|------|-------|
| 1 | Add `Write-Host "N. Your Pack Name"` | Menu display section |
| 2 | Add `elseif ($useCaseSelection -eq "N") { ... }` | Selection handler |
| 3 | Add deployment block (team config upload + `Deploy-ContentPack`) | After Content Gen block |
| 4 | Add `-or $useCaseSelection -eq "N"` to network/KB/success conditions | Only if pack has data |

After adding your entry, update `$allOption` to `N + 1` so "All" is always last.

---

## Agent Tool Options Reference

| Field | Type | Purpose |
|-------|------|---------|
| `use_knowledge_base` | bool | Connects a Foundry IQ KB as an MCP search tool |
| `knowledge_base_name` | string | Name of the KB (must exist in `seed_knowledge_bases.py`) |
| `use_file_search` | bool | Attaches an Azure AI vector store for file-level RAG |
| `vector_store_name` | string | Name of the vector store in Foundry |
| `use_toolbox` | bool | Connects MCP toolbox tools (e.g., `generate_marketing_image`) |
| `toolbox_filter` | string | Tag filter for which toolbox tools are available |
| `coding_tools` | bool | Enables code interpreter sandbox |
| `user_responses` | bool | Allows the agent to pause and ask the user a question |

> **`user_responses` guidance:** Default to `false` unless the user explicitly
> asks for the agent to collect human feedback or ask clarifying questions.
> When `false`, the agent runs autonomously without pausing for input. Only set
> to `true` on agents whose design requires them to ask the user a question
> mid-workflow (e.g., an intake agent gathering requirements).

---

## Deploying

```bash
# 1. Deploy infrastructure
azd up

# 2. Provision pack resources — select your pack or "All"
./infra/scripts/Selecting-Team-Config-And-Data.ps1 -ResourceGroup <rg>
```

---

## Checklist

- [ ] `content_packs/<pack>/agent_teams/` has at least one valid JSON team config
- [ ] `team_id` is a valid hex UUID (0-9, a-f only)
- [ ] `starting_tasks` has at least one example prompt
- [ ] If using a KB: `pack.json` exists with matching `index_name`
- [ ] If using a KB: `datasets/data/` contains the source files
- [ ] If using a KB: entry added to `seed_knowledge_bases.py` with matching names
- [ ] If using a KB: agent has `use_knowledge_base: true` + correct `knowledge_base_name`
- [ ] Agent `system_message` tells it to search (not hallucinate)
- [ ] Pack registered in `Selecting-Team-Config-And-Data.ps1` (all 4 locations)
- [ ] `$allOption` updated if you added a new menu number

---

## Removing a Pack

Delete the pack folder. Previously uploaded team configs remain in Cosmos until
deleted via `DELETE /api/v4/team_configs/{team_id}`. Search indexes and blob
containers are also left in place — clean up with `az search` / `az storage`.

3 changes: 3 additions & 0 deletions .github/prompts/speckit.contentpack.prompt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
agent: speckit.contentpack
---
14 changes: 13 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
# Local specifications / task tracking
localspec/

# Azurite local storage emulator
__azurite_db_*

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
Expand Down Expand Up @@ -126,6 +132,7 @@ celerybeat.pid
# Environments
.env
.venv
.venv-*
scriptenv
env/
venv/
Expand Down Expand Up @@ -464,4 +471,9 @@ __pycache__/
data/sample_code/
# Bicep local files
*.local*.bicepparam
*.local*.parameters.json
*.local*.parameters.json

# Compiled ARM template (regenerated by azd provision)
infra/main.json
# Preflight check artifacts
infra/preflight-*.bicepparam
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ Follow the quick deploy steps on the deployment guide to deploy this solution to

To deploy this solution accelerator, ensure you have access to an [Azure subscription](https://azure.microsoft.com/free/) with the necessary permissions to create **resource groups and resources**. Follow the steps in [Azure Account Set Up](./docs/AzureAccountSetUp.md).

Check the [Azure Products by Region](https://azure.microsoft.com/en-us/explore/global-infrastructure/products-by-region/table) page and select a **region** where the following services are available: Azure OpenAI Service, Azure AI Search, and Azure Semantic Search.
Check the [Azure Products by Region](https://azure.microsoft.com/en-us/explore/global-infrastructure/products-by-region/table) page and select a **region** where the following services are available: Microsoft Foundry Service, Foundry Models, Azure AI Search, and Search Semantic Ranker.

Here are some example regions where the services are available: East US, East US2, Japan East, UK South, Sweden Central.

Expand All @@ -98,7 +98,8 @@ Pricing varies per region and usage, so it isn't possible to predict exact costs
Use the [Azure pricing calculator](https://azure.microsoft.com/en-us/pricing/calculator) to calculate the cost of this solution in your subscription. [Review a sample pricing sheet for the architecture](https://azure.com/e/86d0eefbe4dd4a23981c1d3d4f6fe7ed).
| Product | Description | Cost |
|---|---|---|
| [Azure OpenAI Service](https://learn.microsoft.com/azure/ai-services/openai/) | Powers the AI agents for task automation | [Pricing](https://azure.microsoft.com/pricing/details/cognitive-services/openai-service/) |
| [Microsoft Foundry]( https://learn.microsoft.com/en-us/azure/foundry/) | Powers the AI agents for task automation | [Pricing](https://azure.microsoft.com/en-us/pricing/details/microsoft-foundry/) |
| [Azure AI Search](https://learn.microsoft.com/en-us/azure/search/) | Powers vector based data search | [Pricing]( https://azure.microsoft.com/en-us/pricing/details/search/) |
| [Azure Container Apps](https://learn.microsoft.com/azure/container-apps/) | Hosts the web application frontend | [Pricing](https://azure.microsoft.com/pricing/details/container-apps/) |
| [Azure Cosmos DB](https://learn.microsoft.com/azure/cosmos-db/) | Stores metadata and processing results | [Pricing](https://azure.microsoft.com/pricing/details/cosmos-db/) |
| [Azure Container Registry](https://learn.microsoft.com/azure/container-registry/) | Stores container images for deployment | [Pricing](https://azure.microsoft.com/pricing/details/container-registry/) |
Expand Down Expand Up @@ -159,6 +160,7 @@ By using the *Multi-Agent Custom Automation Engine* solution accelerator, users
| Retail Remediation | Customer Success Manager | This approach is seeking a smarter way to manage workflows and ensure customer satisfaction. Challenges include difficulty engaging the right agents, inefficiencies from manual processes, fragmented data, and limited security controls. | Using the Multi-Agent Custom Automation Engine, the Customer Success Manager recruits intelligent agents to analyze satisfaction and recommend steps for remediation. The platform’s modular design and reasoning capabilities allow for analyzing dependencies, planning transitions, and reducing manual rework. |
| RFP Reviewer | VP of Finance | Reviewing RFPs manually under tight deadlines is challenging. Compliance checks and risk assessments slow progress, leaving critical gaps and delaying decisions. | Multi-Agent RFP Reviewer is an intelligent platform addresses these issues by deploying AI agents to review RFPs, identify risks, recommend remediation, and execute actions seamlessly - transforming a labor-intensive process into a fast, accurate, and compliant workflow. |
| Contract Compliance Reviewer | Compliance Counsel | Reviewing Contracts for compliance manually under tight deadlines is challenging. Compliance checks and risk assessments slow progress, leaving critical gaps and delaying decisions. | Multi-Agent Contract Compliance Reviewer is an intelligent platform addresses these issues by deploying AI agents to review Contracts, identify risks, recommend remediation, and execute actions seamlessly - transforming a labor-intensive process into a fast, accurate, and compliant workflow. |
| Content Generation | Marketing Creative | Accelerate your marketing content creation by leveraging AI to interpret creative briefs and generate on-brand, multimodal content. The solution helps marketing teams reduce time-to-market for campaigns by automating the creation of compliant marketing copy and images grounded in product data. | This solution leverages a team of agents to interpret creative briefs, retrieve product information, generate marketing content, and validate brand compliance. |

</details>

Expand Down
1 change: 0 additions & 1 deletion __azurite_db_queue__.json

This file was deleted.

1 change: 0 additions & 1 deletion __azurite_db_queue_extent__.json

This file was deleted.

Loading
Loading