Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Deploy, evaluate, and manage AI agents end-to-end on Microsoft Azure AI Foundry
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
models/deploy-model/preset/references/preset-workflow.md
1# Preset Deployment Workflow - Detailed Implementation23This file contains the full step-by-step bash/PowerShell scripts for preset (optimal region) model deployment. Referenced from the main [SKILL.md](../SKILL.md).45---67## Phase 1: Verify Authentication89Check if user is logged into Azure CLI:1011```bash12az account show --query "{Subscription:name, User:user.name}" -o table13```1415**If not logged in:**16```bash17az login18```1920**Verify subscription is correct:**21```bash22# List all subscriptions23az account list --query "[].[name,id,state]" -o table2425# Set active subscription if needed26az account set --subscription <subscription-id>27```2829---3031## Phase 2: Get Current Project3233**Check for PROJECT_RESOURCE_ID environment variable first:**3435```bash36if [ -n "$PROJECT_RESOURCE_ID" ]; then37echo "Using project resource ID from environment: $PROJECT_RESOURCE_ID"38else39echo "PROJECT_RESOURCE_ID not set. Please provide your Azure AI Foundry project resource ID."40echo ""41echo "You can find this in:"42echo " • Azure AI Foundry portal → Project → Overview → Resource ID"43echo " • Format: /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{account}/projects/{project}"44echo ""45echo "Example: /subscriptions/abc123.../resourceGroups/rg-prod/providers/Microsoft.CognitiveServices/accounts/my-account/projects/my-project"46echo ""47read -p "Enter project resource ID: " PROJECT_RESOURCE_ID48fi49```5051**Parse the ARM resource ID to extract components:**5253```bash54# Extract components from ARM resource ID55# Format: /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{account}/projects/{project}5657SUBSCRIPTION_ID=$(echo "$PROJECT_RESOURCE_ID" | sed -n 's|.*/subscriptions/\([^/]*\).*|\1|p')58RESOURCE_GROUP=$(echo "$PROJECT_RESOURCE_ID" | sed -n 's|.*/resourceGroups/\([^/]*\).*|\1|p')59ACCOUNT_NAME=$(echo "$PROJECT_RESOURCE_ID" | sed -n 's|.*/accounts/\([^/]*\)/projects.*|\1|p')60PROJECT_NAME=$(echo "$PROJECT_RESOURCE_ID" | sed -n 's|.*/projects/\([^/?]*\).*|\1|p')6162if [ -z "$SUBSCRIPTION_ID" ] || [ -z "$RESOURCE_GROUP" ] || [ -z "$ACCOUNT_NAME" ] || [ -z "$PROJECT_NAME" ]; then63echo "❌ Invalid project resource ID format"64echo "Expected format: /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{account}/projects/{project}"65exit 166fi6768echo "Parsed project details:"69echo " Subscription: $SUBSCRIPTION_ID"70echo " Resource Group: $RESOURCE_GROUP"71echo " Account: $ACCOUNT_NAME"72echo " Project: $PROJECT_NAME"73```7475**Verify the project exists and get its region:**7677```bash78# Set active subscription79az account set --subscription "$SUBSCRIPTION_ID"8081# Get project details to verify it exists and extract region82PROJECT_REGION=$(az cognitiveservices account show \83--name "$PROJECT_NAME" \84--resource-group "$RESOURCE_GROUP" \85--query location -o tsv 2>/dev/null)8687if [ -z "$PROJECT_REGION" ]; then88echo "❌ Project '$PROJECT_NAME' not found in resource group '$RESOURCE_GROUP'"89echo ""90echo "Please verify the resource ID is correct."91echo ""92echo "List available projects:"93echo " az cognitiveservices account list --query \"[?kind=='AIProject'].{Name:name, Location:location, ResourceGroup:resourceGroup}\" -o table"94exit 195fi9697echo "✓ Project found"98echo " Region: $PROJECT_REGION"99```100101---102103## Phase 3: Get Model Name104105**If model name provided as skill parameter, skip this phase.**106107Ask user which model to deploy. **Fetch available models dynamically** from the account rather than using a hardcoded list:108109```bash110# List available models in the account111az cognitiveservices account list-models \112--name "$PROJECT_NAME" \113--resource-group "$RESOURCE_GROUP" \114--query "[].name" -o tsv | sort -u115```116117Present the results to the user and let them choose, or enter a custom model name.118119**Store model:**120```bash121MODEL_NAME="<selected-model>"122```123124**Get model version (latest stable):**125```bash126# List available models and versions in the account127az cognitiveservices account list-models \128--name "$PROJECT_NAME" \129--resource-group "$RESOURCE_GROUP" \130--query "[?name=='$MODEL_NAME'].{Name:name, Version:version, Format:format}" \131-o table132```133134**Use latest version or let user specify:**135```bash136MODEL_VERSION="<version-or-latest>"137```138139**Detect model format:**140141```bash142# Get model format from model catalog (e.g., OpenAI, Anthropic, Meta-Llama, Mistral, Cohere)143MODEL_FORMAT=$(az cognitiveservices account list-models \144--name "$ACCOUNT_NAME" \145--resource-group "$RESOURCE_GROUP" \146--query "[?name=='$MODEL_NAME'].format" -o tsv | head -1)147148# Default to OpenAI if not found149MODEL_FORMAT=${MODEL_FORMAT:-"OpenAI"}150151echo "Model format: $MODEL_FORMAT"152```153154> 💡 **Model format determines the deployment path:**155> - `OpenAI` — Standard CLI deployment, TPM-based capacity, RAI policies apply156> - `Anthropic` — REST API deployment with `modelProviderData`, capacity=1, no RAI157> - All other formats (`Meta-Llama`, `Mistral`, `Cohere`, etc.) — Standard CLI deployment, capacity=1 (MaaS), no RAI158159---160161## Phase 4: Check Current Region Capacity162163Before checking other regions, see if the current project's region has capacity:164165```bash166# Query capacity for current region167CAPACITY_JSON=$(az rest --method GET \168--url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.CognitiveServices/locations/$PROJECT_REGION/modelCapacities?api-version=2024-10-01&modelFormat=$MODEL_FORMAT&modelName=$MODEL_NAME&modelVersion=$MODEL_VERSION")169170# Extract available capacity for GlobalStandard SKU171CURRENT_CAPACITY=$(echo "$CAPACITY_JSON" | jq -r '.value[] | select(.properties.skuName=="GlobalStandard") | .properties.availableCapacity')172```173174**Check result:**175```bash176if [ -n "$CURRENT_CAPACITY" ] && [ "$CURRENT_CAPACITY" -gt 0 ]; then177echo "✓ Current region ($PROJECT_REGION) has capacity: $CURRENT_CAPACITY TPM"178echo "Proceeding with deployment..."179# Skip to Phase 7 (Deploy)180else181echo "⚠ Current region ($PROJECT_REGION) has no available capacity"182echo "Checking alternative regions..."183# Continue to Phase 5184fi185```186187---188189## Phase 5: Query Multi-Region Capacity (If Needed)190191Only execute this phase if current region has no capacity.192193**Query capacity across all regions:**194```bash195# Get capacity for all regions in subscription196ALL_REGIONS_JSON=$(az rest --method GET \197--url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.CognitiveServices/modelCapacities?api-version=2024-10-01&modelFormat=$MODEL_FORMAT&modelName=$MODEL_NAME&modelVersion=$MODEL_VERSION")198199# Save to file for processing200echo "$ALL_REGIONS_JSON" > /tmp/capacity_check.json201```202203**Parse and categorize regions:**204```bash205# Extract available regions (capacity > 0)206AVAILABLE_REGIONS=$(jq -r '.value[] | select(.properties.skuName=="GlobalStandard" and .properties.availableCapacity > 0) | "\(.location)|\(.properties.availableCapacity)"' /tmp/capacity_check.json)207208# Extract unavailable regions (capacity = 0 or undefined)209UNAVAILABLE_REGIONS=$(jq -r '.value[] | select(.properties.skuName=="GlobalStandard" and (.properties.availableCapacity == 0 or .properties.availableCapacity == null)) | "\(.location)|0"' /tmp/capacity_check.json)210```211212**Format and display regions:**213```bash214# Format capacity (e.g., 120000 -> 120K)215format_capacity() {216local capacity=$1217if [ "$capacity" -ge 1000000 ]; then218echo "$(awk "BEGIN {printf \"%.1f\", $capacity/1000000}")M TPM"219elif [ "$capacity" -ge 1000 ]; then220echo "$(awk "BEGIN {printf \"%.0f\", $capacity/1000}")K TPM"221else222echo "$capacity TPM"223fi224}225226echo ""227echo "⚠ No Capacity in Current Region"228echo ""229echo "The current project's region ($PROJECT_REGION) does not have available capacity for $MODEL_NAME."230echo ""231echo "Available Regions (with capacity):"232echo ""233234# Display available regions with formatted capacity235echo "$AVAILABLE_REGIONS" | while IFS='|' read -r region capacity; do236formatted_capacity=$(format_capacity "$capacity")237# Get region display name (capitalize and format)238region_display=$(echo "$region" | sed 's/\([a-z]\)\([a-z]*\)/\U\1\L\2/g; s/\([a-z]\)\([0-9]\)/\1 \2/g')239echo " • $region_display - $formatted_capacity"240done241242echo ""243echo "Unavailable Regions:"244echo ""245246# Display unavailable regions247echo "$UNAVAILABLE_REGIONS" | while IFS='|' read -r region capacity; do248region_display=$(echo "$region" | sed 's/\([a-z]\)\([a-z]*\)/\U\1\L\2/g; s/\([a-z]\)\([0-9]\)/\1 \2/g')249if [ "$capacity" = "0" ]; then250echo " ✗ $region_display (Insufficient quota - 0 TPM available)"251else252echo " ✗ $region_display (Model not supported)"253fi254done255```256257**Handle no capacity anywhere:**258```bash259if [ -z "$AVAILABLE_REGIONS" ]; then260echo ""261echo "❌ No Available Capacity in Any Region"262echo ""263echo "No regions have available capacity for $MODEL_NAME with GlobalStandard SKU."264echo ""265echo "Next Steps:"266echo "1. Request quota increase — use the quota skill (../../../quota/quota.md)"267echo ""268echo "2. Check existing deployments (may be using quota):"269echo " az cognitiveservices account deployment list \\"270echo " --name $PROJECT_NAME \\"271echo " --resource-group $RESOURCE_GROUP"272echo ""273echo "3. Consider alternative models with lower capacity requirements:"274echo " • gpt-4o-mini (cost-effective, lower capacity requirements)"275echo " List available models: az cognitiveservices account list-models --name \$PROJECT_NAME --resource-group \$RESOURCE_GROUP --output table"276exit 1277fi278```279280---281282## Phase 6: Select Region and Project283284**Ask user to select region from available options.**285286Example using AskUserQuestion:287- Present available regions as options288- Show capacity for each289- User selects preferred region290291**Store selection:**292```bash293SELECTED_REGION="<user-selected-region>" # e.g., "eastus2"294```295296**Find projects in selected region:**297```bash298PROJECTS_IN_REGION=$(az cognitiveservices account list \299--query "[?kind=='AIProject' && location=='$SELECTED_REGION'].{Name:name, ResourceGroup:resourceGroup}" \300--output json)301302PROJECT_COUNT=$(echo "$PROJECTS_IN_REGION" | jq '. | length')303304if [ "$PROJECT_COUNT" -eq 0 ]; then305echo "No projects found in $SELECTED_REGION"306echo "Would you like to create a new project? (yes/no)"307# If yes, continue to project creation308# If no, exit or select different region309else310echo "Projects in $SELECTED_REGION:"311echo "$PROJECTS_IN_REGION" | jq -r '.[] | " • \(.Name) (\(.ResourceGroup))"'312echo ""313echo "Select a project or create new project"314fi315```316317**Option A: Use existing project**318```bash319PROJECT_NAME="<selected-project-name>"320RESOURCE_GROUP="<resource-group>"321```322323**Option B: Create new project**324```bash325# Generate project name326USER_ALIAS=$(az account show --query user.name -o tsv | cut -d'@' -f1 | tr '.' '-')327RANDOM_SUFFIX=$(openssl rand -hex 2)328NEW_PROJECT_NAME="${USER_ALIAS}-aiproject-${RANDOM_SUFFIX}"329330# Prompt for resource group331echo "Resource group for new project:"332echo " 1. Use existing resource group: $RESOURCE_GROUP"333echo " 2. Create new resource group"334335# If existing resource group336NEW_RESOURCE_GROUP="$RESOURCE_GROUP"337338# Create AI Services account (hub)339HUB_NAME="${NEW_PROJECT_NAME}-hub"340341echo "Creating AI Services hub: $HUB_NAME in $SELECTED_REGION..."342343az cognitiveservices account create \344--name "$HUB_NAME" \345--resource-group "$NEW_RESOURCE_GROUP" \346--location "$SELECTED_REGION" \347--kind "AIServices" \348--sku "S0" \349--yes350351# Create AI Foundry project352echo "Creating AI Foundry project: $NEW_PROJECT_NAME..."353354az cognitiveservices account create \355--name "$NEW_PROJECT_NAME" \356--resource-group "$NEW_RESOURCE_GROUP" \357--location "$SELECTED_REGION" \358--kind "AIProject" \359--sku "S0" \360--yes361362echo "✓ Project created successfully"363PROJECT_NAME="$NEW_PROJECT_NAME"364RESOURCE_GROUP="$NEW_RESOURCE_GROUP"365```366367---368369## Phase 7: Deploy Model370371**Generate unique deployment name:**372373The deployment name should match the model name (e.g., "gpt-4o"), but if a deployment with that name already exists, append a numeric suffix (e.g., "gpt-4o-2", "gpt-4o-3"). This follows the same UX pattern as Azure AI Foundry portal.374375Use the `generate_deployment_name` script to check existing deployments and generate a unique name:376377*Bash version:*378```bash379DEPLOYMENT_NAME=$(bash scripts/generate_deployment_name.sh \380"$ACCOUNT_NAME" \381"$RESOURCE_GROUP" \382"$MODEL_NAME")383384echo "Generated deployment name: $DEPLOYMENT_NAME"385```386387*PowerShell version:*388```powershell389$DEPLOYMENT_NAME = & .\scripts\generate_deployment_name.ps1 `390-AccountName $ACCOUNT_NAME `391-ResourceGroup $RESOURCE_GROUP `392-ModelName $MODEL_NAME393394Write-Host "Generated deployment name: $DEPLOYMENT_NAME"395```396397**Calculate deployment capacity:**398399Follow UX capacity calculation logic. For OpenAI models, use 50% of available capacity (minimum 50 TPM). For all other models (MaaS), capacity is always 1:400401```bash402if [ "$MODEL_FORMAT" = "OpenAI" ]; then403# OpenAI models: TPM-based capacity (50% of available, minimum 50)404SELECTED_CAPACITY=$(echo "$ALL_REGIONS_JSON" | jq -r ".value[] | select(.location==\"$SELECTED_REGION\" and .properties.skuName==\"GlobalStandard\") | .properties.availableCapacity")405406if [ "$SELECTED_CAPACITY" -gt 50 ]; then407DEPLOY_CAPACITY=$((SELECTED_CAPACITY / 2))408if [ "$DEPLOY_CAPACITY" -lt 50 ]; then409DEPLOY_CAPACITY=50410fi411else412DEPLOY_CAPACITY=$SELECTED_CAPACITY413fi414415echo "Deploying with capacity: $DEPLOY_CAPACITY TPM (50% of available: $SELECTED_CAPACITY TPM)"416else417# Non-OpenAI models (MaaS): capacity is always 1418DEPLOY_CAPACITY=1419echo "MaaS model — deploying with capacity: 1 (pay-per-token billing)"420fi421```422423### If MODEL_FORMAT is NOT "Anthropic" — Standard CLI Deployment424425> 💡 **Note:** The Azure CLI supports all non-Anthropic model formats directly.426427*Bash version:*428```bash429echo "Creating deployment..."430431az cognitiveservices account deployment create \432--name "$ACCOUNT_NAME" \433--resource-group "$RESOURCE_GROUP" \434--deployment-name "$DEPLOYMENT_NAME" \435--model-name "$MODEL_NAME" \436--model-version "$MODEL_VERSION" \437--model-format "$MODEL_FORMAT" \438--sku-name "GlobalStandard" \439--sku-capacity "$DEPLOY_CAPACITY"440```441442*PowerShell version:*443```powershell444Write-Host "Creating deployment..."445446az cognitiveservices account deployment create `447--name $ACCOUNT_NAME `448--resource-group $RESOURCE_GROUP `449--deployment-name $DEPLOYMENT_NAME `450--model-name $MODEL_NAME `451--model-version $MODEL_VERSION `452--model-format $MODEL_FORMAT `453--sku-name "GlobalStandard" `454--sku-capacity $DEPLOY_CAPACITY455```456457> 💡 **Note:** For non-OpenAI MaaS models (Meta-Llama, Mistral, Cohere, etc.), `$DEPLOY_CAPACITY` is `1` (set in capacity calculation above).458459### If MODEL_FORMAT is "Anthropic" — REST API Deployment with modelProviderData460461The Azure CLI does not support `--model-provider-data`. You must use the ARM REST API directly.462463**Step 1: Prompt user to select industry**464465Present the following list and ask the user to choose one:466467```4681. None (API value: none)4692. Biotechnology (API value: biotechnology)4703. Consulting (API value: consulting)4714. Education (API value: education)4725. Finance (API value: finance)4736. Food & Beverage (API value: food_and_beverage)4747. Government (API value: government)4758. Healthcare (API value: healthcare)4769. Insurance (API value: insurance)47710. Law (API value: law)47811. Manufacturing (API value: manufacturing)47912. Media (API value: media)48013. Nonprofit (API value: nonprofit)48114. Technology (API value: technology)48215. Telecommunications (API value: telecommunications)48316. Sport & Recreation (API value: sport_and_recreation)48417. Real Estate (API value: real_estate)48518. Retail (API value: retail)48619. Other (API value: other)487```488489> ⚠️ **Do NOT pick a default industry or hardcode a value. Always ask the user.** This is required by Anthropic's terms of service. The industry list is static — there is no REST API that provides it.490491Store selection as `SELECTED_INDUSTRY` (use the API value, e.g., `technology`).492493**Step 2: Fetch tenant info (country code and organization name)**494495```bash496TENANT_INFO=$(az rest --method GET \497--url "https://management.azure.com/tenants?api-version=2024-11-01" \498--query "value[0].{countryCode:countryCode, displayName:displayName}" -o json)499500COUNTRY_CODE=$(echo "$TENANT_INFO" | jq -r '.countryCode')501ORG_NAME=$(echo "$TENANT_INFO" | jq -r '.displayName')502```503504*PowerShell version:*505```powershell506$tenantInfo = az rest --method GET `507--url "https://management.azure.com/tenants?api-version=2024-11-01" `508--query "value[0].{countryCode:countryCode, displayName:displayName}" -o json | ConvertFrom-Json509510$countryCode = $tenantInfo.countryCode511$orgName = $tenantInfo.displayName512```513514**Step 3: Deploy via ARM REST API**515516*Bash version:*517```bash518echo "Creating Anthropic model deployment via REST API..."519520az rest --method PUT \521--url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.CognitiveServices/accounts/$ACCOUNT_NAME/deployments/$DEPLOYMENT_NAME?api-version=2024-10-01" \522--body "{523\"sku\": {524\"name\": \"GlobalStandard\",525\"capacity\": 1526},527\"properties\": {528\"model\": {529\"format\": \"Anthropic\",530\"name\": \"$MODEL_NAME\",531\"version\": \"$MODEL_VERSION\"532},533\"modelProviderData\": {534\"industry\": \"$SELECTED_INDUSTRY\",535\"countryCode\": \"$COUNTRY_CODE\",536\"organizationName\": \"$ORG_NAME\"537}538}539}"540```541542*PowerShell version:*543```powershell544Write-Host "Creating Anthropic model deployment via REST API..."545546$body = @{547sku = @{548name = "GlobalStandard"549capacity = 1550}551properties = @{552model = @{553format = "Anthropic"554name = $MODEL_NAME555version = $MODEL_VERSION556}557modelProviderData = @{558industry = $SELECTED_INDUSTRY559countryCode = $countryCode560organizationName = $orgName561}562}563} | ConvertTo-Json -Depth 5564565az rest --method PUT `566--url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.CognitiveServices/accounts/$ACCOUNT_NAME/deployments/${DEPLOYMENT_NAME}?api-version=2024-10-01" `567--body $body568```569570> 💡 **Note:** Anthropic models use `capacity: 1` (MaaS billing model), not TPM-based capacity.571572**Monitor deployment progress:**573```bash574echo "Monitoring deployment status..."575576MAX_WAIT=300 # 5 minutes577ELAPSED=0578INTERVAL=10579580while [ $ELAPSED -lt $MAX_WAIT ]; do581STATUS=$(az cognitiveservices account deployment show \582--name "$ACCOUNT_NAME" \583--resource-group "$RESOURCE_GROUP" \584--deployment-name "$DEPLOYMENT_NAME" \585--query "properties.provisioningState" -o tsv 2>/dev/null)586587case "$STATUS" in588"Succeeded")589echo "✓ Deployment successful!"590break591;;592"Failed")593echo "❌ Deployment failed"594# Get error details595az cognitiveservices account deployment show \596--name "$ACCOUNT_NAME" \597--resource-group "$RESOURCE_GROUP" \598--deployment-name "$DEPLOYMENT_NAME" \599--query "properties"600exit 1601;;602"Creating"|"Accepted"|"Running")603echo "Status: $STATUS... (${ELAPSED}s elapsed)"604sleep $INTERVAL605ELAPSED=$((ELAPSED + INTERVAL))606;;607*)608echo "Unknown status: $STATUS"609sleep $INTERVAL610ELAPSED=$((ELAPSED + INTERVAL))611;;612esac613done614615if [ $ELAPSED -ge $MAX_WAIT ]; then616echo "⚠ Deployment timeout after ${MAX_WAIT}s"617echo "Check status manually:"618echo " az cognitiveservices account deployment show \\"619echo " --name $ACCOUNT_NAME \\"620echo " --resource-group $RESOURCE_GROUP \\"621echo " --deployment-name $DEPLOYMENT_NAME"622exit 1623fi624```625626---627628## Phase 8: Display Deployment Details629630**Show deployment information:**631```bash632echo ""633echo "═══════════════════════════════════════════"634echo "✓ Deployment Successful!"635echo "═══════════════════════════════════════════"636echo ""637638# Get endpoint information639ENDPOINT=$(az cognitiveservices account show \640--name "$ACCOUNT_NAME" \641--resource-group "$RESOURCE_GROUP" \642--query "properties.endpoint" -o tsv)643644# Get deployment details645DEPLOYMENT_INFO=$(az cognitiveservices account deployment show \646--name "$ACCOUNT_NAME" \647--resource-group "$RESOURCE_GROUP" \648--deployment-name "$DEPLOYMENT_NAME" \649--query "properties.model")650651echo "Deployment Name: $DEPLOYMENT_NAME"652echo "Model: $MODEL_NAME"653echo "Version: $MODEL_VERSION"654echo "Region: $SELECTED_REGION"655echo "SKU: GlobalStandard"656echo "Capacity: $(format_capacity $DEPLOY_CAPACITY)"657echo "Endpoint: $ENDPOINT"658echo ""659660# Generate direct link to deployment in Azure AI Foundry portal661DEPLOYMENT_URL=$(bash "$(dirname "$0")/scripts/generate_deployment_url.sh" \662--subscription "$SUBSCRIPTION_ID" \663--resource-group "$RESOURCE_GROUP" \664--foundry-resource "$ACCOUNT_NAME" \665--project "$PROJECT_NAME" \666--deployment "$DEPLOYMENT_NAME")667668echo "🔗 View in Azure AI Foundry Portal:"669echo ""670echo "$DEPLOYMENT_URL"671echo ""672echo "═══════════════════════════════════════════"673echo ""674675echo "Test your deployment:"676echo ""677echo "# View deployment details"678echo "az cognitiveservices account deployment show \\"679echo " --name $ACCOUNT_NAME \\"680echo " --resource-group $RESOURCE_GROUP \\"681echo " --deployment-name $DEPLOYMENT_NAME"682echo ""683echo "# List all deployments"684echo "az cognitiveservices account deployment list \\"685echo " --name $ACCOUNT_NAME \\"686echo " --resource-group $RESOURCE_GROUP \\"687echo " --output table"688echo ""689690echo "Next steps:"691echo "• Click the link above to test in Azure AI Foundry playground"692echo "• Integrate into your application"693echo "• Set up monitoring and alerts"694```695