diff --git a/.github/workflows/deploy-waf.yml b/.github/workflows/deploy-waf.yml
index 108cb6888..187fa8e93 100644
--- a/.github/workflows/deploy-waf.yml
+++ b/.github/workflows/deploy-waf.yml
@@ -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
@@ -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
@@ -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 \
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 2ccc3a90e..479bc4a23 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -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:
@@ -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
@@ -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
@@ -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
@@ -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)
MACAE_URL_API=$(az containerapp show \
--name "$CONTAINER_APP_NAME" \
@@ -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()
@@ -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 }}
@@ -317,7 +365,7 @@ jobs:
echo "Resource purging completed successfully"
- name: Send Notification on Failure
- if: failure()
+
run: |
RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
diff --git a/.github/workflows/test-automation.yml b/.github/workflows/test-automation.yml
index edc99527e..6c4344739 100644
--- a/.github/workflows/test-automation.yml
+++ b/.github/workflows/test-automation.yml
@@ -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
diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md
index 168d84922..66f81675a 100644
--- a/docs/DeploymentGuide.md
+++ b/docs/DeploymentGuide.md
@@ -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.
@@ -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.
diff --git a/docs/SampleQuestions.md b/docs/SampleQuestions.md
new file mode 100644
index 000000000..89f0ed0c1
--- /dev/null
+++ b/docs/SampleQuestions.md
@@ -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
+
+
+
+### **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._
+ > _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._
+ > _Observe: It goes into "Thinking Process", "Processing your plan" and "coordinating with AI Agents"._
+ > _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._
+ > _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._
+ > _Observe: It goes into "Thinking Process" and observe a spinner "Processing your plan and coordinating with AI Agents"._
+ > _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._
+ > _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_
+
+
+- Task: Click on **"Approve Task Plan"** Button.
+ > _Note: Average response time is around 01 minute 15 seconds._
+ > _Observe: It goes into "Thinking Process", "Processing your plan" and "coordinating with AI Agents"_
+ > _Review the output._
+
+
+This structured approach ensures that users receive automated, AI-coordinated task execution and intelligent responses from specialized agents.
diff --git a/docs/images/samplequestion_1.png b/docs/images/samplequestion_1.png
new file mode 100644
index 000000000..caf68d483
Binary files /dev/null and b/docs/images/samplequestion_1.png differ
diff --git a/infra/scripts/checkquota.sh b/infra/scripts/checkquota.sh
index 3a10f543c..6fcb64614 100644
--- a/infra/scripts/checkquota.sh
+++ b/infra/scripts/checkquota.sh
@@ -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}"
@@ -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
@@ -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=""
diff --git a/infra/scripts/upload_team_config.py b/infra/scripts/upload_team_config.py
index 3a7e2ccb7..d3c2b45e2 100644
--- a/infra/scripts/upload_team_config.py
+++ b/infra/scripts/upload_team_config.py
@@ -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)
@@ -80,6 +80,7 @@ def check_team_exists(backend_url, team_id, user_principal_id):
headers = {
'x-ms-client-principal-id': user_principal_id
}
+
params = {
'team_id': team_id
}
diff --git a/src/tests/agents/interactive_test_harness/reasoning_agent_interactive.py b/src/tests/agents/interactive_test_harness/reasoning_agent_interactive.py
index 7b0a71db8..9d87c7d46 100644
--- a/src/tests/agents/interactive_test_harness/reasoning_agent_interactive.py
+++ b/src/tests/agents/interactive_test_harness/reasoning_agent_interactive.py
@@ -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