Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
32 changes: 32 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu
{
"name": "Ubuntu",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/devcontainers/base:noble",
"features": {
"ghcr.io/devcontainers/features/azure-cli:1": {},
"ghcr.io/devcontainers/features/dotnet:2": {},
"ghcr.io/devcontainers/features/go:1": {},
"ghcr.io/devcontainers/features/java:1": {},
"ghcr.io/devcontainers/features/node:1": {},
"ghcr.io/devcontainers/features/python:1": {}
},
"containerEnv": {
"MAVEN_OPTS": "-Dmaven.compiler.source=11 -Dmaven.compiler.target=11"
},
"customizations": {
"vscode": {
"extensions": [
"caleuche.caleuche-vscode"
]
}
},
"postCreateCommand": ".devcontainer/init.sh"

// Configure tool-specific properties.
// "customizations": {},

// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}
3 changes: 3 additions & 0 deletions .devcontainer/init.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/usr/bin/env bash

npm install -g @caleuche/cli
6 changes: 3 additions & 3 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@
/samples/java/quickstart/src/main/java/com/microsoft/foundry/samples/CreateResponses.java @microsoft-foundry/AI-Platform-Docs
/samples/python/enterprise-agent-tutorial/1-idea-to-prototype/evaluate.py @microsoft-foundry/AI-Platform-Docs
/samples/python/enterprise-agent-tutorial/1-idea-to-prototype/main.py @microsoft-foundry/AI-Platform-Docs
/samples/python/quickstart/quickstart-chat-with-agent.py @microsoft-foundry/AI-Platform-Docs
/samples/python/quickstart/quickstart-create-agent.py @microsoft-foundry/AI-Platform-Docs
/samples/python/quickstart/quickstart-responses.py @microsoft-foundry/AI-Platform-Docs
/samples/python/quickstart/chat-with-agent/quickstart-chat-with-agent.py @microsoft-foundry/AI-Platform-Docs
/samples/python/quickstart/create-agent/quickstart-create-agent.py @microsoft-foundry/AI-Platform-Docs
/samples/python/quickstart/responses/quickstart-responses.py @microsoft-foundry/AI-Platform-Docs
/samples/typescript/quickstart/src/quickstart-chat-with-agent.ts @microsoft-foundry/AI-Platform-Docs
/samples/typescript/quickstart/src/quickstart-create-agent.ts @microsoft-foundry/AI-Platform-Docs
/samples/typescript/quickstart/src/quickstart-responses.ts @microsoft-foundry/AI-Platform-Docs
4 changes: 4 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ repos:
rev: v3.2.0
hooks:
- id: check-added-large-files
- repo: https://github.com/rhysd/actionlint
rev: v1.7.7
hooks:
- id: actionlint
- repo: local
hooks:
- id: nb-clean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,6 @@ To use an existing VNet and subnets, set the existingVnetResourceId parameter to
- param agentSubnetPrefix string = '192.168.0.0/24' //optional, default is '192.168.0.0/24'
- param peSubnetName string = 'pe-subnet' //optional, default is 'pe-subnet'
- param peSubnetPrefix string = '192.168.1.0/24' //optional, default is '192.168.1.0/24'
- param dnsZonesSubscriptionId string = '' //optional, leave empty to use current subscription, or set to a subscription ID if DNS zones are in a different subscription
- param existingDnsZones = {

'privatelink.services.ai.azure.com': 'privzoneRG' //add resource group name where your private DNS zone is located
Expand All @@ -126,10 +125,6 @@ To use an existing VNet and subnets, set the existingVnetResourceId parameter to

💡 If subnets information is provided then make sure it exist within the specified VNet to avoid deployment errors. If subnet information is not provided, the template will create subnets with the default address space.

💡 **Cross-Subscription DNS Zones**: All DNS zones specified in `existingDnsZones` will be referenced from the subscription specified in `dnsZonesSubscriptionId`. Leave this parameter empty (default) to use the current deployment subscription, or set it to a subscription ID if your DNS zones are located in a different subscription.

⚠️ **Important**: When `dnsZonesSubscriptionId` is set to a different subscription, ALL DNS zones in `existingDnsZones` must have resource groups specified (non-empty values). The template does not support creating new DNS zones in a different subscription. Empty resource groups are only allowed when creating zones in the current deployment subscription.


2. **Use an existing Azure Cosmos DB for NoSQL**

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "16616047834738415823"
"version": "0.40.2.10011",
"templateHash": "6036653163159842994"
}
},
"parameters": {
Expand Down Expand Up @@ -288,8 +288,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "8505298823279202405"
"version": "0.40.2.10011",
"templateHash": "9522150535342725348"
}
},
"parameters": {
Expand Down Expand Up @@ -402,8 +402,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "4954184648131521061"
"version": "0.40.2.10011",
"templateHash": "1725519900292599397"
}
},
"parameters": {
Expand Down Expand Up @@ -575,8 +575,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "3152324712046183852"
"version": "0.40.2.10011",
"templateHash": "12834877200138369468"
}
},
"parameters": {
Expand Down Expand Up @@ -665,8 +665,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "17043822047386586435"
"version": "0.40.2.10011",
"templateHash": "16684585228229443328"
}
},
"parameters": {
Expand Down Expand Up @@ -748,8 +748,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "17043822047386586435"
"version": "0.40.2.10011",
"templateHash": "16684585228229443328"
}
},
"parameters": {
Expand Down Expand Up @@ -920,8 +920,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "854097619778148359"
"version": "0.40.2.10011",
"templateHash": "481468620289904255"
}
},
"parameters": {
Expand Down Expand Up @@ -1057,8 +1057,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "7641310640078958122"
"version": "0.40.2.10011",
"templateHash": "16869070767065140538"
}
},
"parameters": {
Expand Down Expand Up @@ -1209,8 +1209,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "2754228344238136934"
"version": "0.40.2.10011",
"templateHash": "1228922674432785221"
}
},
"parameters": {
Expand Down Expand Up @@ -1489,8 +1489,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "8094529554453089222"
"version": "0.40.2.10011",
"templateHash": "8505208925695592232"
}
},
"parameters": {
Expand Down Expand Up @@ -2018,8 +2018,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "5095087340309076800"
"version": "0.40.2.10011",
"templateHash": "1007872875847158534"
}
},
"parameters": {
Expand Down Expand Up @@ -2193,8 +2193,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "6910483561575524105"
"version": "0.40.2.10011",
"templateHash": "12606978205101260380"
}
},
"parameters": {
Expand Down Expand Up @@ -2248,8 +2248,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "14683840003859985069"
"version": "0.40.2.10011",
"templateHash": "15991712531324316353"
}
},
"parameters": {
Expand All @@ -2264,7 +2264,7 @@
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"scope": "[format('Microsoft.Storage/storageAccounts/{0}', parameters('azureStorageName'))]",
"scope": "[resourceId('Microsoft.Storage/storageAccounts', parameters('azureStorageName'))]",
"name": "[guid(parameters('projectPrincipalId'), resourceId('Microsoft.Authorization/roleDefinitions', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe'), resourceId('Microsoft.Storage/storageAccounts', parameters('azureStorageName')))]",
"properties": {
"principalId": "[parameters('projectPrincipalId')]",
Expand Down Expand Up @@ -2306,8 +2306,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "25128059954858801"
"version": "0.40.2.10011",
"templateHash": "7256419427588810161"
}
},
"parameters": {
Expand All @@ -2328,7 +2328,7 @@
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"scope": "[format('Microsoft.DocumentDB/databaseAccounts/{0}', parameters('cosmosDBName'))]",
"scope": "[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('cosmosDBName'))]",
"name": "[guid(parameters('projectPrincipalId'), resourceId('Microsoft.Authorization/roleDefinitions', '230815da-be43-4aae-9cb4-875f7bd000aa'), resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('cosmosDBName')))]",
"properties": {
"principalId": "[parameters('projectPrincipalId')]",
Expand Down Expand Up @@ -2370,8 +2370,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "7968115481508840"
"version": "0.40.2.10011",
"templateHash": "15867124606695536257"
}
},
"parameters": {
Expand All @@ -2392,7 +2392,7 @@
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"scope": "[format('Microsoft.Search/searchServices/{0}', parameters('aiSearchName'))]",
"scope": "[resourceId('Microsoft.Search/searchServices', parameters('aiSearchName'))]",
"name": "[guid(parameters('projectPrincipalId'), resourceId('Microsoft.Authorization/roleDefinitions', '8ebe5a00-799e-43f5-93ac-243d3dce84a7'), resourceId('Microsoft.Search/searchServices', parameters('aiSearchName')))]",
"properties": {
"principalId": "[parameters('projectPrincipalId')]",
Expand All @@ -2403,7 +2403,7 @@
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"scope": "[format('Microsoft.Search/searchServices/{0}', parameters('aiSearchName'))]",
"scope": "[resourceId('Microsoft.Search/searchServices', parameters('aiSearchName'))]",
"name": "[guid(parameters('projectPrincipalId'), resourceId('Microsoft.Authorization/roleDefinitions', '7ca78c08-252a-4471-8644-bb5ff32d4ba0'), resourceId('Microsoft.Search/searchServices', parameters('aiSearchName')))]",
"properties": {
"principalId": "[parameters('projectPrincipalId')]",
Expand Down Expand Up @@ -2455,8 +2455,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "17458377866351620215"
"version": "0.40.2.10011",
"templateHash": "687161311666023487"
}
},
"parameters": {
Expand Down Expand Up @@ -2549,8 +2549,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "13874725855824693255"
"version": "0.40.2.10011",
"templateHash": "3625425571119261380"
}
},
"parameters": {
Expand Down Expand Up @@ -2580,7 +2580,7 @@
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"scope": "[format('Microsoft.Storage/storageAccounts/{0}', parameters('storageName'))]",
"scope": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageName'))]",
"name": "[guid(resourceId('Microsoft.Authorization/roleDefinitions', 'b7e6dc6d-f1e8-4753-8033-0f276bb0955b'), resourceId('Microsoft.Storage/storageAccounts', parameters('storageName')))]",
"properties": {
"principalId": "[parameters('aiProjectPrincipalId')]",
Expand Down Expand Up @@ -2628,8 +2628,8 @@
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.39.26.7824",
"templateHash": "17187611271934567223"
"version": "0.40.2.10011",
"templateHash": "14722474518981746838"
}
},
"parameters": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,6 @@ param azureCosmosDBAccountResourceId string = ''
//@description('Optional: Resource group containing existing private DNS zones. If specified, DNS zones will not be created.')
//param existingDnsZonesResourceGroup string = ''

@description('Subscription ID where existing private DNS zones are located. Leave empty to use current subscription.')
param dnsZonesSubscriptionId string = ''

@description('Object mapping DNS zone names to their resource group, or empty string to indicate creation')
param existingDnsZones object = {
'privatelink.services.ai.azure.com': ''
Expand Down Expand Up @@ -149,9 +146,6 @@ var vnetResourceGroupName = existingVnetPassedIn ? vnetParts[4] : resourceGroup(
var existingVnetName = existingVnetPassedIn ? last(vnetParts) : vnetName
var trimVnetName = trim(existingVnetName)

// Resolve DNS zones subscription ID - use current subscription if not specified
var resolvedDnsZonesSubscriptionId = empty(dnsZonesSubscriptionId) ? subscription().subscriptionId : dnsZonesSubscriptionId

@description('The name of the project capability host to be created')
param projectCapHost string = 'caphostproj'

Expand Down Expand Up @@ -202,7 +196,6 @@ module validateExistingResources 'modules-network-secured/validate-existing-reso
azureCosmosDBAccountResourceId: azureCosmosDBAccountResourceId
existingDnsZones: existingDnsZones
dnsZoneNames: dnsZoneNames
dnsZonesSubscriptionId: resolvedDnsZonesSubscriptionId
}
}

Expand Down Expand Up @@ -271,7 +264,6 @@ module privateEndpointAndDNS 'modules-network-secured/private-endpoint-and-dns.b
storageAccountResourceGroupName: azureStorageResourceGroupName // Resource Group for Storage Account
storageAccountSubscriptionId: azureStorageSubscriptionId // Subscription ID for Storage Account
existingDnsZones: existingDnsZones
dnsZonesSubscriptionId: resolvedDnsZonesSubscriptionId
}
dependsOn: [
aiSearch // Ensure AI Search exists
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using './main.bicep'

param location = 'westus'
param aiServices = 'foundry'
param modelName = 'gpt-4.1'
param location = 'eastus2'
param aiServices = 'aiservices'
param modelName = 'gpt-4o'
param modelFormat = 'OpenAI'
param modelVersion = '2025-04-14'
param modelVersion = '2024-11-20'
param modelSkuName = 'GlobalStandard'
param modelCapacity = 30
param firstProjectName = 'project'
Expand All @@ -20,13 +20,8 @@ param agentSubnetName = 'agent-subnet'
param aiSearchResourceId = ''
param azureStorageAccountResourceId = ''
param azureCosmosDBAccountResourceId = ''

// Subscription ID where DNS zones are located (leave empty to use deployment subscription)
// ⚠️ If set to a different subscription, ALL zones below MUST have resource groups specified
param dnsZonesSubscriptionId = ''

// DNS zone map: provide resource group name to use existing zone, or leave empty to create new
// Note: Empty values only allowed when dnsZonesSubscriptionId is empty or matches current subscription
// Pass the DNS zone map here
// Leave empty to create new DNS zone, add the resource group of existing DNS zone to use it
param existingDnsZones = {
'privatelink.services.ai.azure.com': ''
'privatelink.openai.azure.com': ''
Expand Down
Loading