55DEPLOYMENT_TYPE=" Standard"
66CAPACITY=0
77
8+ ALL_REGIONS=(' australiaeast' ' eastus2' ' francecentral' ' japaneast' ' norwayeast' ' swedencentral' ' uksouth' ' westus' )
9+
810while [[ $# -gt 0 ]]; do
911 case " $1 " in
1012 --model)
@@ -30,64 +32,75 @@ while [[ $# -gt 0 ]]; do
3032 esac
3133done
3234
33- # Verify all required parameters are provided and echo missing ones
35+ # Validate required params
3436MISSING_PARAMS=()
37+ [[ -z " $LOCATION " ]] && MISSING_PARAMS+=(" location" )
38+ [[ -z " $MODEL " ]] && MISSING_PARAMS+=(" model" )
39+ [[ -z " $CAPACITY " ]] && MISSING_PARAMS+=(" capacity" )
3540
36- if [[ -z " $LOCATION " ]]; then
37- MISSING_PARAMS+=(" location" )
41+ if [[ ${# MISSING_PARAMS[@]} -ne 0 ]]; then
42+ echo " ❌ ERROR: Missing required parameters: ${MISSING_PARAMS[*]} "
43+ echo " Usage: $0 --location <LOCATION> --model <MODEL> --capacity <CAPACITY> [--deployment-type <DEPLOYMENT_TYPE>]"
44+ exit 1
3845fi
3946
40- if [[ -z " $MODEL " ]]; then
41- MISSING_PARAMS+=(" model" )
47+ if [[ " $DEPLOYMENT_TYPE " != " Standard" && " $DEPLOYMENT_TYPE " != " GlobalStandard" ]]; then
48+ echo " ❌ ERROR: Invalid deployment type: $DEPLOYMENT_TYPE . Allowed values are 'Standard' or 'GlobalStandard'."
49+ exit 1
4250fi
4351
44- if [[ -z " $CAPACITY " ]]; then
45- MISSING_PARAMS+=(" capacity" )
46- fi
52+ MODEL_TYPE=" OpenAI.$DEPLOYMENT_TYPE .$MODEL "
4753
48- if [[ -z " $DEPLOYMENT_TYPE " ]] ; then
49- MISSING_PARAMS+=( " deployment-type " )
50- fi
54+ check_quota () {
55+ local region= " $1 "
56+ echo " 🔍 Checking quota for $MODEL_TYPE in $region ... "
5157
52- if [[ ${# MISSING_PARAMS[@]} -ne 0 ]]; then
53- echo " ❌ ERROR: Missing required parameters: ${MISSING_PARAMS[*]} "
54- echo " Usage: $0 --location <LOCATION> --model <MODEL> --capacity <CAPACITY> [--deployment-type <DEPLOYMENT_TYPE>]"
55- exit 1
56- fi
58+ MODEL_INFO=$( az cognitiveservices usage list --location " $region " --query " [?name.value=='$MODEL_TYPE ']" --output json 2> /dev/null)
5759
58- if [[ " $DEPLOYMENT_TYPE " != " Standard " && " $DEPLOYMENT_TYPE " != " GlobalStandard " ]]; then
59- echo " ❌ ERROR: Invalid deployment type: $DEPLOYMENT_TYPE . Allowed values are 'Standard' or 'GlobalStandard'. "
60- exit 1
61- fi
60+ if [[ -z " $MODEL_INFO " || " $MODEL_INFO " == " [] " ]]; then
61+ echo " ⚠️ No quota info found for $MODEL_TYPE in $region "
62+ return 1
63+ fi
6264
63- MODEL_TYPE=" OpenAI.$DEPLOYMENT_TYPE .$MODEL "
65+ CURRENT_VALUE=$( echo " $MODEL_INFO " | jq -r ' .[0].currentValue // 0' | cut -d' .' -f1)
66+ LIMIT=$( echo " $MODEL_INFO " | jq -r ' .[0].limit // 0' | cut -d' .' -f1)
67+ AVAILABLE=$(( LIMIT - CURRENT_VALUE))
6468
65- echo " 🔍 Checking quota for $MODEL_TYPE in $LOCATION ... "
69+ echo " 🔎 Model: $MODEL_TYPE | Used: $CURRENT_VALUE | Limit: $LIMIT | Available: $AVAILABLE "
6670
67- MODEL_INFO=$( az cognitiveservices usage list --location " $LOCATION " --query " [?name.value=='$MODEL_TYPE ']" --output json | tr ' [:upper:]' ' [:lower:]' )
71+ if (( AVAILABLE >= CAPACITY )) ; then
72+ echo " ✅ Sufficient quota in $region "
73+ return 0
74+ else
75+ echo " ❌ Insufficient quota in $region (Available: $AVAILABLE , Required: $CAPACITY )"
76+ return 1
77+ fi
78+ }
6879
69- if [ -z " $MODEL_INFO " ] ; then
70- echo " ❌ ERROR: No quota information found for model: $MODEL in location: $ LOCATION for model type: $MODEL_TYPE . "
71- exit 1
80+ # Try user-provided region
81+ if check_quota " $ LOCATION" ; then
82+ exit 0
7283fi
7384
74- if [ -n " $MODEL_INFO " ]; then
75- CURRENT_VALUE=$( echo " $MODEL_INFO " | awk -F' : ' ' /"currentvalue"/ {print $2}' | tr -d ' ,' | tr -d ' ' )
76- LIMIT=$( echo " $MODEL_INFO " | awk -F' : ' ' /"limit"/ {print $2}' | tr -d ' ,' | tr -d ' ' )
77-
78- CURRENT_VALUE=${CURRENT_VALUE:- 0}
79- LIMIT=${LIMIT:- 0}
85+ # Try fallback regions
86+ REMAINING_REGIONS=()
87+ for region in " ${ALL_REGIONS[@]} " ; do
88+ if [[ " $region " != " $LOCATION " ]]; then
89+ REMAINING_REGIONS+=(" $region " )
90+ fi
91+ done
8092
81- CURRENT_VALUE=$( echo " $CURRENT_VALUE " | cut -d' .' -f1)
82- LIMIT=$( echo " $LIMIT " | cut -d' .' -f1)
93+ echo " 🔁 Trying fallback regions for available quota..."
8394
84- AVAILABLE=$(( LIMIT - CURRENT_VALUE))
85- echo " ✅ Model available - Model: $MODEL_TYPE | Used: $CURRENT_VALUE | Limit: $LIMIT | Available: $AVAILABLE "
95+ for region in " ${REMAINING_REGIONS[@]} " ; do
96+ if check_quota " $region " ; then
97+ echo " 🚫 Deployment cannot proceed because the original region '$LOCATION ' lacks sufficient quota."
98+ echo " ➡️ You can retry using the available region: '$region '"
99+ echo " 🔧 To proceed, update the 'AZURE_OPENAI_LOCATION' value in the 'main.bicepparam' file, then run:"
100+ echo " azd env set AZURE_OPENAI_LOCATION '$region '"
101+ exit 1
102+ fi
103+ done
86104
87- if [ " $AVAILABLE " -lt " $CAPACITY " ]; then
88- echo " ❌ ERROR: Insufficient quota for model: $MODEL in location: $LOCATION . Available: $AVAILABLE , Requested: $CAPACITY ."
89- exit 1
90- else
91- echo " ✅ Sufficient quota for model: $MODEL in location: $LOCATION . Available: $AVAILABLE , Requested: $CAPACITY ."
92- fi
93- fi
105+ echo " ❌ ERROR: No available quota found in any of the fallback regions."
106+ exit 1
0 commit comments