Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
169abc3
Create SampleQuestions.md
Thanusree-Microsoft Oct 27, 2025
01b720a
Add sample questions for app functionalities
Thanusree-Microsoft Oct 27, 2025
afffdb3
Add files via upload
Thanusree-Microsoft Oct 28, 2025
6bc75e5
Refine sample prompts for Teams and scenarios
Thanusree-Microsoft Oct 28, 2025
8f5ccdb
Add 'Next Steps' section to Deployment Guide
Thanusree-Microsoft Oct 28, 2025
85b40f4
added e2e testing in the deploy pipeline
Dhruvkumar-Microsoft Oct 30, 2025
d389a70
added e2e-test before cleanup
Dhruvkumar-Microsoft Oct 30, 2025
71472a9
removed the clienup
Dhruvkumar-Microsoft Oct 30, 2025
72d317c
updated the checkquota script
Dhruvkumar-Microsoft Oct 30, 2025
8c56749
updated the script and details
Dhruvkumar-Microsoft Oct 30, 2025
b3d2e70
updated the version
Dhruvkumar-Microsoft Oct 30, 2025
c4d34e6
changing the tags
Dhruvkumar-Microsoft Oct 30, 2025
3dfb05c
updated the deploy.yml
Dhruvkumar-Microsoft Oct 30, 2025
3deb17d
removed notification
Dhruvkumar-Microsoft Oct 30, 2025
e3a6b6a
changed the container app name
Dhruvkumar-Microsoft Oct 30, 2025
028456f
updated the script to get the backend container app
Dhruvkumar-Microsoft Oct 30, 2025
506fbcb
updated the upload config
Dhruvkumar-Microsoft Oct 30, 2025
9d75ff2
changed the files
Dhruvkumar-Microsoft Oct 30, 2025
8908ec7
added the print
Dhruvkumar-Microsoft Oct 30, 2025
fd26edd
added the extra condition
Dhruvkumar-Microsoft Oct 30, 2025
6cc781d
uncommented the send notification
Dhruvkumar-Microsoft Oct 31, 2025
1138506
added accelerator name
Dhruvkumar-Microsoft Oct 31, 2025
ff71f57
Merge branch 'dev-v3' of https://github.com/microsoft/Multi-Agent-Cus…
Dhruvkumar-Microsoft Oct 31, 2025
bd42066
updated the team config files
Dhruvkumar-Microsoft Oct 31, 2025
71729d4
updated the waf and nonwaf pipeline
Dhruvkumar-Microsoft Oct 31, 2025
f012de1
removed the workflow_dispatch
Dhruvkumar-Microsoft Oct 31, 2025
0750c8e
added the trigger
Dhruvkumar-Microsoft Oct 31, 2025
5bc8c1b
added env variables
Dhruvkumar-Microsoft Oct 31, 2025
0fff97f
removed the feature branch from trigger
Dhruvkumar-Microsoft Oct 31, 2025
c22b2d3
Merge pull request #604 from microsoft/psl-dk-e2epipeline
Roopan-Microsoft Nov 3, 2025
6f2da10
Update Retail Scenario instructions
Roopan-Microsoft Nov 4, 2025
e3ecf3f
Revise Sample Prompts for Teams and Scenarios
Roopan-Microsoft Nov 4, 2025
780882e
Update SampleQuestions.md
Roopan-Microsoft Nov 4, 2025
f2880d9
Update image alt text in SampleQuestions.md
Thanusree-Microsoft Nov 4, 2025
b9b2c80
Apply suggestion from @Copilot
Roopan-Microsoft Nov 4, 2025
7bcdedd
Apply suggestion from @Copilot
Roopan-Microsoft Nov 4, 2025
2453e76
Apply suggestion from @Copilot
Roopan-Microsoft Nov 4, 2025
4b51ba3
Refine task observations and response time notes
Thanusree-Microsoft Nov 5, 2025
14eed6a
Merge pull request #613 from microsoft/psl-samplequestion-doc
Roopan-Microsoft Nov 6, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions .github/workflows/deploy-waf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ on:
jobs:
deploy:
runs-on: ubuntu-latest
env:
GPT_MIN_CAPACITY: 1
O4_MINI_MIN_CAPACITY: 1
GPT41_MINI_MIN_CAPACITY: 1
steps:
- name: Checkout Code
uses: actions/checkout@v3
Expand All @@ -21,7 +25,9 @@ jobs:
export AZURE_TENANT_ID=${{ secrets.AZURE_TENANT_ID }}
export AZURE_CLIENT_SECRET=${{ secrets.AZURE_CLIENT_SECRET }}
export AZURE_SUBSCRIPTION_ID="${{ secrets.AZURE_SUBSCRIPTION_ID }}"
export GPT_MIN_CAPACITY="150"
export GPT_MIN_CAPACITY="1"
export O4_MINI_MIN_CAPACITY="1"
export GPT41_MINI_MIN_CAPACITY="1"
export AZURE_REGIONS="${{ vars.AZURE_REGIONS }}"

chmod +x infra/scripts/checkquota.sh
Expand Down Expand Up @@ -116,7 +122,9 @@ jobs:
solutionName=${{ env.SOLUTION_PREFIX }} \
location="${{ env.AZURE_LOCATION }}" \
azureAiServiceLocation='${{ env.AZURE_LOCATION }}' \
gptModelCapacity=5 \
gptModelCapacity=${{ env.GPT_MIN_CAPACITY }} \
gpt4_1ModelCapacity=${{ env.GPT41_MINI_MIN_CAPACITY }} \
gptReasoningModelCapacity=${{ env.O4_MINI_MIN_CAPACITY }} \
enableTelemetry=true \
enableMonitoring=true \
enablePrivateNetworking=true \
Expand Down
66 changes: 57 additions & 9 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ on:
- cron: "0 11,23 * * *" # Runs at 11:00 AM and 11:00 PM GMT
workflow_dispatch: #Allow manual triggering
env:
GPT_MIN_CAPACITY: 1
GPT_MIN_CAPACITY: 150
O4_MINI_MIN_CAPACITY: 50
GPT41_MINI_MIN_CAPACITY: 50
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}

jobs:
Expand All @@ -36,7 +38,9 @@ jobs:
export AZURE_TENANT_ID=${{ secrets.AZURE_TENANT_ID }}
export AZURE_CLIENT_SECRET=${{ secrets.AZURE_CLIENT_SECRET }}
export AZURE_SUBSCRIPTION_ID="${{ secrets.AZURE_SUBSCRIPTION_ID }}"
export GPT_MIN_CAPACITY="1"
export GPT_MIN_CAPACITY="150"
export O4_MINI_MIN_CAPACITY="50"
export GPT41_MINI_MIN_CAPACITY="50"
export AZURE_REGIONS="${{ vars.AZURE_REGIONS }}"

chmod +x infra/scripts/checkquota.sh
Expand Down Expand Up @@ -122,7 +126,7 @@ jobs:
elif [[ "${{ env.BRANCH_NAME }}" == "hotfix" ]]; then
IMAGE_TAG="hotfix"
else
IMAGE_TAG="latest"
IMAGE_TAG="latest_v3"
fi

# Generate current timestamp in desired format: YYYY-MM-DDTHH:MM:SS.SSSSSSSZ
Expand All @@ -135,12 +139,12 @@ jobs:
solutionName=${{ env.SOLUTION_PREFIX }} \
location="${{ env.AZURE_LOCATION }}" \
gptModelDeploymentType="GlobalStandard" \
gptModelName="gpt-4o" \
gptModelVersion="2024-08-06" \
gptModelName="gpt-4.1-mini" \
gptModelVersion="2025-04-14" \
backendContainerImageTag="${IMAGE_TAG}" \
frontendContainerImageTag="${IMAGE_TAG}" \
azureAiServiceLocation='${{ env.AZURE_LOCATION }}' \
gptModelCapacity=1 \
gptModelCapacity=50 \
createdBy="Pipeline" \
tags="{'SecurityControl':'Ignore','Purpose':'Deploying and Cleaning Up Resources for Validation','CreatedDate':'$current_date'}" \
--output json
Expand All @@ -159,9 +163,10 @@ jobs:
- name: Get Container App Backend URL
id: get_backend_url
run: |
# Get specifically the backend container app (not the MCP container app)
CONTAINER_APP_NAME=$(az containerapp list \
--resource-group ${{ env.RESOURCE_GROUP_NAME }} \
--query "[0].name" -o tsv)
--query "[?starts_with(name, 'ca-') && !contains(name, 'mcp')].name" -o tsv)

Copilot AI Nov 7, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The query filter !contains(name, 'mcp') may not work correctly if there are container apps with names that don't follow expected naming patterns. Consider using a more specific filter based on the actual naming convention used in the bicep templates (e.g., checking for a specific prefix or suffix that uniquely identifies the backend container app).

Suggested change
--query "[?starts_with(name, 'ca-') && !contains(name, 'mcp')].name" -o tsv)
--query "[?starts_with(name, 'ca-backend-')].name" -o tsv)

Copilot uses AI. Check for mistakes.

MACAE_URL_API=$(az containerapp show \
--name "$CONTAINER_APP_NAME" \
Expand All @@ -171,6 +176,38 @@ jobs:
echo "MACAE_URL_API=https://${MACAE_URL_API}" >> $GITHUB_OUTPUT
echo "CONTAINER_APP=${CONTAINER_APP_NAME}" >> $GITHUB_OUTPUT

- name: Run Post deployment scripts
run: |
set -e
az account set --subscription "${{ secrets.AZURE_SUBSCRIPTION_ID }}"

echo "Running post-deployment script..."

# Extract required resource names from the deployment
STORAGE_ACCOUNT=$(az resource list --resource-group ${{ env.RESOURCE_GROUP_NAME }} --resource-type "Microsoft.Storage/storageAccounts" --query "[0].name" -o tsv)
AI_SEARCH=$(az resource list --resource-group ${{ env.RESOURCE_GROUP_NAME }} --resource-type "Microsoft.Search/searchServices" --query "[0].name" -o tsv)

echo "Found Storage Account: $STORAGE_ACCOUNT"
echo "Found AI Search Service: $AI_SEARCH"
echo "Backend URL: ${{ steps.get_backend_url.outputs.MACAE_URL_API }}"

# Run upload team config script with parameters
bash infra/scripts/upload_team_config.sh \
"${{ steps.get_backend_url.outputs.MACAE_URL_API }}" \
"data/agent_teams" \
"${{ secrets.AZURE_SUBSCRIPTION_ID }}"

# Run process sample data script with parameters
bash infra/scripts/process_sample_data.sh \
"$STORAGE_ACCOUNT" \
"sample-dataset" \
"$AI_SEARCH" \
"sample-dataset-index" \
"${{ env.RESOURCE_GROUP_NAME }}" \
"${{ secrets.AZURE_SUBSCRIPTION_ID }}"

echo "=== Post-Deployment Script Completed Successfully ==="

- name: Set Deployment Status
id: deployment_status
if: always()
Expand All @@ -181,9 +218,20 @@ jobs:
echo "SUCCESS=false" >> $GITHUB_OUTPUT
fi

e2e-test:
needs: deploy
if: needs.deploy.outputs.DEPLOYMENT_SUCCESS == 'true'
uses: ./.github/workflows/test-automation.yml
with:
MACAE_WEB_URL: ${{ needs.deploy.outputs.WEBAPP_URL }}
MACAE_URL_API: ${{ needs.deploy.outputs.MACAE_URL_API }}
MACAE_RG: ${{ needs.deploy.outputs.RESOURCE_GROUP_NAME }}
MACAE_CONTAINER_APP: ${{ needs.deploy.outputs.CONTAINER_APP }}
secrets: inherit

cleanup-deployment:
if: always() && needs.deploy.outputs.RESOURCE_GROUP_NAME != ''
needs: [deploy]
needs: [deploy, e2e-test]
runs-on: ubuntu-latest
env:
RESOURCE_GROUP_NAME: ${{ needs.deploy.outputs.RESOURCE_GROUP_NAME }}
Expand Down Expand Up @@ -317,7 +365,7 @@ jobs:
echo "Resource purging completed successfully"

- name: Send Notification on Failure
if: failure()

Comment thread
Roopan-Microsoft marked this conversation as resolved.
run: |
RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test-automation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
MACAE_URL_API: ${{ inputs.MACAE_URL_API }}
MACAE_RG: ${{ inputs.MACAE_RG }}
MACAE_CONTAINER_APP: ${{ inputs.MACAE_CONTAINER_APP }}
accelerator_name: "MACAE"
accelerator_name: "MACAE v3"

steps:
- name: Checkout repository
Expand Down
5 changes: 4 additions & 1 deletion docs/DeploymentGuide.md
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,6 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain

10. If you are done trying out the application, you can delete the resources by running `azd down`.


### 🛠️ Troubleshooting
If you encounter any issues during the deployment process, please refer [troubleshooting](../docs/TroubleShootingSteps.md) document for detailed steps and solutions.

Expand Down Expand Up @@ -497,3 +496,7 @@ To debug the python server in the frontend directory (frontend_server.py) and re
"jinja": true
}
```
## Next Steps
Now that you've completed your deployment, you can start using the solution.

To help you get started, here are some [Sample Questions](./SampleQuestions.md) you can follow to try it out.
77 changes: 77 additions & 0 deletions docs/SampleQuestions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@

# Sample Workflow

To help you get started, here are some **Sample Prompts** you can ask in the app:

## **Teams**
Select the Team option from the top-left section, then click Continue after choosing the desired team.

By default, three teams are available after running the post-deployment scripts:
- Retail
- HR
- Marketing

![Application](images/samplequestion_1.png)

### **Retail Scenario**
If you select the Retail team, follow the prompts below.

>**Agents Used:** Customer, Order, Analysis Recommendation

The Retail scenario enables users to explore and access information related to the Retail team and its associated data. Key activities include:

_Sample operation:_
- Task: From the Quick Tasks, select **"Satisfaction Plan"** and submit it.
> _Note: Average response time is 15–20 seconds._ <br>
> _Observe: An analysis of Emily Thompson’s satisfaction with Contoso has been generated. It provides a proposed plan consisting of four or more steps._

- Task: Click **"Approve Task Plan"** Button
> _Note: Average response time is 01 minute 15 seconds._ <br>
> _Observe: It goes into "Thinking Process", "Processing your plan" and "coordinating with AI Agents"._ <br>
> _Review the output._

### **Product Marketing Scenario**
If you select the Marketing team, follow the prompts below.

>**Agents Used:** Product, Marketing , Proxy

The Product Marketing Scenario allows users to explore and retrieve information related to Marketing and specific product. Key tasks include:

_Sample operation:_
- Task: Switch to **"Product Marketing Team"** from the top left section and click **"Continue"** button.
- Task: From the Quick Tasks, select **"Draft a press release"** and submit it.
> _Note: Average response time is 15–20 seconds._ <br>
> _Observe: It will trigger the "Generating Plan Action" and give the Proposed Plan with 4 or more Steps_
- Task: Click on **"Approve Task Plan"** Button
> _Note: Average response time is around 01 minute._ <br>
> _Observe: It goes into "Thinking Process" and observe a spinner "Processing your plan and coordinating with AI Agents"._ <br>
> _Review the output._

### **HR Onboarding Scenario**
If you select the HR team, follow the prompts below.

>**Agents Used:** HR Helper, Technical support , Proxy

The HR Onboarding Scenario allows users to explore and retrieve information related to OnBoarding the Employee. Key tasks include:

_Sample operation:_

- Task: Switch to the **"Human Resources Team"** from the top left section and click **"Continue"**
- Task: From the Quick Tasks, select **"Onboard New Employee"** and submit it.

> _Note: Average response time is 15–20 seconds._ <br>
> _Observe: If it asks for additional clarification (Human in the loop) Please provide this information irrespective of what specific information is asked. This will prevent agent for asking for multiple clarifications_

```sh
department: hr, role: manager, start date: 11/23/2025, orientation date: 11/25/2025, location: onsite, email: js@contoso.com, mentor: Jim Shorts, benefits package: standard, ID Card: yes, salary: 70000, Laptop : Dell 14 Plus
```
> _Observe: It will trigger "Generating Plan Action" and "Proposed Plan" with 4 or more Steps_
</br>

- Task: Click on **"Approve Task Plan"** Button.
> _Note: Average response time is around 01 minute 15 seconds._ <br>
> _Observe: It goes into "Thinking Process", "Processing your plan" and "coordinating with AI Agents"_ <br>
> _Review the output._


This structured approach ensures that users receive automated, AI-coordinated task execution and intelligent responses from specialized agents.
Binary file added docs/images/samplequestion_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 8 additions & 2 deletions infra/scripts/checkquota.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ IFS=', ' read -ra REGIONS <<< "$AZURE_REGIONS"

SUBSCRIPTION_ID="${AZURE_SUBSCRIPTION_ID}"
GPT_MIN_CAPACITY="${GPT_MIN_CAPACITY}"
O4_MINI_MIN_CAPACITY="${O4_MINI_MIN_CAPACITY}"
GPT41_MINI_MIN_CAPACITY="${GPT41_MINI_MIN_CAPACITY}"
AZURE_CLIENT_ID="${AZURE_CLIENT_ID}"
AZURE_TENANT_ID="${AZURE_TENANT_ID}"
AZURE_CLIENT_SECRET="${AZURE_CLIENT_SECRET}"
Expand All @@ -17,8 +19,10 @@ if ! az login --service-principal -u "$AZURE_CLIENT_ID" -p "$AZURE_CLIENT_SECRET
fi

echo "🔄 Validating required environment variables..."
if [[ -z "$SUBSCRIPTION_ID" || -z "$GPT_MIN_CAPACITY" || -z "$REGIONS" ]]; then
if [[ -z "$SUBSCRIPTION_ID" || -z "$REGIONS" ]]; then
echo "❌ ERROR: Missing required environment variables."
echo "Required: AZURE_SUBSCRIPTION_ID, AZURE_REGIONS"
echo "Optional: O4_MINI_MIN_CAPACITY (default: 50), GPT41_MINI_MIN_CAPACITY (default: 50)"
exit 1
fi

Expand All @@ -31,7 +35,9 @@ echo "✅ Azure subscription set successfully."

# Define models and their minimum required capacities
declare -A MIN_CAPACITY=(
["OpenAI.GlobalStandard.gpt-4o"]=$GPT_MIN_CAPACITY
["OpenAI.GlobalStandard.o4-mini"]="${O4_MINI_MIN_CAPACITY}"
["OpenAI.GlobalStandard.gpt4.1"]="${GPT_MIN_CAPACITY}"
["OpenAI.GlobalStandard.gpt4.1-mini"]="${GPT41_MINI_MIN_CAPACITY}"
)

VALID_REGION=""
Expand Down
3 changes: 2 additions & 1 deletion infra/scripts/upload_team_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def check_team_exists(backend_url, team_id, user_principal_id):

backend_url = sys.argv[1]
directory_path = sys.argv[2]
user_principal_id = sys.argv[3] if len(sys.argv) > 3 else "00000000-0000-0000-0000-000000000000"
user_principal_id = sys.argv[3] if len(sys.argv) > 3 and sys.argv[3].strip() != "" else "00000000-0000-0000-0000-000000000000"

# Convert to absolute path if provided as relative
directory_path = os.path.abspath(directory_path)
Expand Down Expand Up @@ -80,6 +80,7 @@ def check_team_exists(backend_url, team_id, user_principal_id):
headers = {
'x-ms-client-principal-id': user_principal_id
}

Comment thread
Roopan-Microsoft marked this conversation as resolved.
params = {
'team_id': team_id
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
from pathlib import Path

# Add the backend path to sys.path so we can import v3 modules
backend_path = Path(__file__).parent.parent.parent / "backend"

backend_path = Path(__file__).parent.parent.parent.parent / "backend"
sys.path.insert(0, str(backend_path))

from v3.magentic_agents.models.agent_models import MCPConfig, SearchConfig
Expand Down
Loading