From c731f983cdcf823915aa44c02a19056f88074507 Mon Sep 17 00:00:00 2001 From: "Priyanka Singhal (Persistent Systems Inc)" Date: Fri, 28 Mar 2025 16:16:31 +0530 Subject: [PATCH 01/27] Update quota check script to list regions with available models and capacities, even if not all models are available --- .devcontainer/devcontainer.json | 2 +- infra/scripts/quota_check_params.sh | 109 +++++++++++++++------------- 2 files changed, 61 insertions(+), 50 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index c868df53b..8cbf2c514 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -16,7 +16,7 @@ ] } }, - "postStartCommand": "git pull origin main && python3 -m pip install -r infra/scripts/index_scripts/requirements.txt", + "postStartCommand": "git pull origin main && python3 -m pip install -r infra/scripts/index_scripts/requirements.txt && curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash", "remoteUser": "vscode", "hostRequirements": { "memory": "4gb" diff --git a/infra/scripts/quota_check_params.sh b/infra/scripts/quota_check_params.sh index 34c05f22d..2037fd3ce 100644 --- a/infra/scripts/quota_check_params.sh +++ b/infra/scripts/quota_check_params.sh @@ -1,17 +1,35 @@ #!/bin/bash -# Parameters +# Default Models and Capacities (Comma-separated) +DEFAULT_MODELS="gpt-4o-mini,text-embedding-ada-002,gpt-4o,gpt-4" +DEFAULT_CAPACITY="30,80,30,30" # Each model will be paired with a capacity in order + +# Convert the comma-separated strings into arrays +IFS=',' read -r -a MODEL_NAMES <<< "$DEFAULT_MODELS" +IFS=',' read -r -a CAPACITIES <<< "$DEFAULT_CAPACITY" + +# Default Regions to check (Comma-separated, now configurable) +DEFAULT_REGIONS="eastus,uksouth,eastus2,northcentralus,swedencentral,westus,westus2,southcentralus,canadacentral" +IFS=',' read -r -a DEFAULT_REGION_ARRAY <<< "$DEFAULT_REGIONS" # Split into an array + +# Read parameters (if any) IFS=',' read -r -a MODEL_CAPACITY_PAIRS <<< "$1" # Split the comma-separated model and capacity pairs into an array USER_REGION="$2" +# If no parameters are passed, use default models and regions if [ ${#MODEL_CAPACITY_PAIRS[@]} -lt 1 ]; then - echo "❌ ERROR: At least one model and capacity pairs must be provided as arguments." - exit 1 + echo "No parameters provided, using default models: ${MODEL_NAMES[*]} with respective capacities: ${CAPACITIES[*]}" + # Use default models and their respective capacities + for i in "${!MODEL_NAMES[@]}"; do + MODEL_CAPACITY_PAIRS+=("${MODEL_NAMES[$i]}:${CAPACITIES[$i]}") + done +else + echo "Using provided model and capacity pairs: ${MODEL_CAPACITY_PAIRS[*]}" fi # Extract model names and required capacities into arrays -declare -a MODEL_NAMES -declare -a CAPACITIES +declare -a FINAL_MODEL_NAMES +declare -a FINAL_CAPACITIES for PAIR in "${MODEL_CAPACITY_PAIRS[@]}"; do MODEL_NAME=$(echo "$PAIR" | cut -d':' -f1) @@ -22,11 +40,11 @@ for PAIR in "${MODEL_CAPACITY_PAIRS[@]}"; do exit 1 fi - MODEL_NAMES+=("$MODEL_NAME") - CAPACITIES+=("$CAPACITY") + FINAL_MODEL_NAMES+=("$MODEL_NAME") + FINAL_CAPACITIES+=("$CAPACITY") done -echo "πŸ”„ Using Models: ${MODEL_NAMES[*]} with respective Capacities: ${CAPACITIES[*]}" +echo "πŸ”„ Using Models: ${FINAL_MODEL_NAMES[*]} with respective Capacities: ${FINAL_CAPACITIES[*]}" echo "πŸ”„ Fetching available Azure subscriptions..." SUBSCRIPTIONS=$(az account list --query "[?state=='Enabled'].{Name:name, ID:id}" --output tsv) @@ -58,20 +76,20 @@ fi # Set the selected subscription az account set --subscription "$AZURE_SUBSCRIPTION_ID" -echo "🎯 Active Subscription: $(az account show --query '[name, id]' --output table)" - -# List of regions to check -DEFAULT_REGIONS=("eastus" "uksouth" "eastus2" "northcentralus" "swedencentral" "westus" "westus2" "southcentralus" "canadacentral") +echo "🎯 Active Subscription: $(az account show --query '[name, id]' --output tsv)" -# Prioritize user-provided region if given +# Check if the user provided a region, if not, use the default regions if [ -n "$USER_REGION" ]; then - # Ensure the user-provided region is checked first - REGIONS=("$USER_REGION" "${DEFAULT_REGIONS[@]}") + echo "πŸ” User provided region: $USER_REGION" + IFS=',' read -r -a REGIONS <<< "$USER_REGION" # Split into an array using comma else - REGIONS=("${DEFAULT_REGIONS[@]}") + echo "No region specified, using default regions: ${DEFAULT_REGION_ARRAY[*]}" + REGIONS=("${DEFAULT_REGION_ARRAY[@]}") fi echo "βœ… Retrieved Azure regions. Checking availability..." +declare -a TABLE_ROWS +INDEX=1 VALID_REGIONS=() for REGION in "${REGIONS[@]}"; do @@ -85,13 +103,13 @@ for REGION in "${REGIONS[@]}"; do continue fi - # Initialize a flag to track if both models have sufficient quota in the region - BOTH_MODELS_AVAILABLE=true + # Initialize a flag to track if all models have sufficient quota in the region + ALL_MODELS_AVAILABLE=true + + for index in "${!FINAL_MODEL_NAMES[@]}"; do + MODEL_NAME="${FINAL_MODEL_NAMES[$index]}" + REQUIRED_CAPACITY="${FINAL_CAPACITIES[$index]}" - for index in "${!MODEL_NAMES[@]}"; do - MODEL_NAME="${MODEL_NAMES[$index]}" - REQUIRED_CAPACITY="${CAPACITIES[$index]}" - echo "πŸ” Checking model: $MODEL_NAME with required capacity: $REQUIRED_CAPACITY" # Extract model quota information @@ -102,7 +120,7 @@ for REGION in "${REGIONS[@]}"; do if [ -z "$MODEL_INFO" ]; then echo "⚠️ WARNING: No quota information found for model: OpenAI.Standard.$MODEL_NAME in $REGION. Skipping." - BOTH_MODELS_AVAILABLE=false + ALL_MODELS_AVAILABLE=false break # If any model is not available, no need to check further for this region fi @@ -123,37 +141,30 @@ for REGION in "${REGIONS[@]}"; do if [ "$AVAILABLE" -lt "$REQUIRED_CAPACITY" ]; then echo "❌ ERROR: 'OpenAI.Standard.$MODEL_NAME' in $REGION has insufficient quota. Required: $REQUIRED_CAPACITY, Available: $AVAILABLE" echo "➑️ To request a quota increase, visit: https://aka.ms/oai/stuquotarequest" - BOTH_MODELS_AVAILABLE=false - break + ALL_MODELS_AVAILABLE=false + else + TABLE_ROWS+=("$(printf "| %-4s | %-20s | %-35s | %-10s | %-10s | %-10s |" "$INDEX" "$REGION" "$MODEL_NAME" "$LIMIT" "$CURRENT_VALUE" "$AVAILABLE")") + + INDEX=$((INDEX + 1)) fi done - # If both models have sufficient quota, add region to valid regions - if [ "$BOTH_MODELS_AVAILABLE" = true ]; then + # If all models have sufficient quota, add region to valid regions + if [ "$ALL_MODELS_AVAILABLE" = true ]; then echo "βœ… All models have sufficient quota in $REGION." VALID_REGIONS+=("$REGION") fi done -# Determine final result and display in table format -if [ ${#VALID_REGIONS[@]} -eq 0 ]; then - echo "----------------------------------------" - echo "❌ No region with sufficient quota found for all models. Blocking deployment." - echo "----------------------------------------" - exit 0 -else - echo "----------------------------------------" - echo "βœ… Suggested Regions with Sufficient Quota" - echo "----------------------------------------" - printf "| %-5s | %-20s |\n" "No." "Region" - echo "----------------------------------------" - - INDEX=1 - for REGION in "${VALID_REGIONS[@]}"; do - printf "| %-5s | %-20s |\n" "$INDEX" "$REGION" - INDEX=$((INDEX + 1)) - done - - echo "----------------------------------------" - exit 0 -fi +# Print table header +echo "----------------------------------------------------------------------------------------------------------" +printf "| %-4s | %-20s | %-35s | %-10s | %-10s | %-10s |\n" "No." "Region" "Model Name" "Limit" "Used" "Available" +echo "----------------------------------------------------------------------------------------------------------" + +for ROW in "${TABLE_ROWS[@]}"; do + echo "$ROW" +done + +echo "----------------------------------------------------------------------------------------------------------" +echo "➑️ To request a quota increase, visit: https://aka.ms/oai/stuquotarequest" +echo "βœ… Script completed." \ No newline at end of file From ee3b120e534a911589381c4e348c56ab0fcf3df5 Mon Sep 17 00:00:00 2001 From: "Priyanka Singhal (Persistent Systems Inc)" Date: Tue, 1 Apr 2025 18:12:40 +0530 Subject: [PATCH 02/27] updated the script and documentation for the quota check --- docs/quota_check.md | 91 ++++++---- infra/scripts/quota_check_all_regions.sh | 92 ---------- infra/scripts/quota_check_params.sh | 221 +++++++++++++---------- 3 files changed, 183 insertions(+), 221 deletions(-) delete mode 100644 infra/scripts/quota_check_all_regions.sh diff --git a/docs/quota_check.md b/docs/quota_check.md index 2c7d65eb9..a15a964d7 100644 --- a/docs/quota_check.md +++ b/docs/quota_check.md @@ -1,57 +1,86 @@ ## Check Quota Availability Before Deployment -Before deploying the accelerator, **ensure sufficient quota availability** for the required model. -Use one of the following scripts based on your needs: +Before deploying the accelerator, **ensure sufficient quota availability** for the required model. \ -- **`quota_check_params.sh`** β†’ If you **know the model and capacity** required. -- **`quota_check_all_regions.sh`** β†’ If you **want to check available capacity across all regions** for supported models. +### πŸ“Œ Default Models & Capacities: +``` +gpt-4o:30, gpt-4o-mini:30, text-embedding-ada-002:80, gpt-4:30, gpt-3.5-turbo:30 +``` +### πŸ“Œ Default Regions: +``` +eastus, uksouth, eastus2, northcentralus, swedencentral, westus, westus2, southcentralus, canadacentral +``` +### Usage Scenarios: +- No parameters passed β†’ Default models and capacities will be checked in default regions. +- Only model(s) provided β†’ The script will check for those models in the default regions. +- Only region(s) provided β†’ The script will check default models in the specified regions. +- Both models and regions provided β†’ The script will check those models in the specified regions. + +### **Input Formats** +βœ”οΈ Run without parameters to check default models & regions: + ``` + ./quota_check_params.sh + ``` +βœ”οΈ Model name and required capacity in the format: + ``` + ./quota_check_params.sh gpt-4o:30 + ``` +βœ”οΈ Multiple models can be passed, separated by commas: + ``` + ./quota_check_params.sh gpt-4o:30,text-embedding-ada-002:80 + ``` +βœ”οΈ Passing Both models and regions: + ``` + ./quota_check_params.sh gpt-4o:30 eastus,westus2 + ``` +βœ”οΈ Check default models in specific regions: + ``` + ./quota_check_params.sh "" eastus,westus2 + ``` + +### **Sample Output** +The final table lists regions with available quota. You can select any of these regions for deployment. + +![quota-check-ouput](images/quota-check-output.png) --- -## **If using Azure Portal and Cloud Shell** +### **If using Azure Portal and Cloud Shell** 1. Navigate to the [Azure Portal](https://portal.azure.com). 2. Click on **Azure Cloud Shell** in the top right navigation menu. 3. Run the appropriate command based on your requirement: - **To check quota for a specific model and capacity:** + **To check quota for the deployment** ```sh curl -L -o quota_check_params.sh "https://raw.githubusercontent.com/microsoft/Conversation-Knowledge-Mining-Solution-Accelerator/main/infra/scripts/quota_check_params.sh" chmod +x quota_check_params.sh - ./quota_check_params.sh [] (e.g., gpt-4o-mini:30,text-embedding-ada-002:20 eastus) + ./quota_check_params.sh ``` - - **To check available quota across all regions for supported models:** - - ```sh - curl -L -o quota_check_all_regions.sh "https://raw.githubusercontent.com/microsoft/Conversation-Knowledge-Mining-Solution-Accelerator/main/infra/scripts/quota_check_all_regions.sh" - chmod +x quota_check_all_regions.sh - ./quota_check_all_regions.sh + - Refer to [Input Formats](#input-formats) for detailed commands. + +### **If using VS Code or Codespaces** +1. Open the terminal in VS Code or Codespaces. +2. If you're using VS Code, click the dropdown on the right side of the terminal window, and select `Git Bash`. + ![git_bash](images/git_bash.png) +3. Navigate to the `scripts` folder where the script files are located and make the script as executable: + ```sh + cd scripts + chmod +x quota_check_params.sh ``` - -## **If using VS Code or Codespaces** - -1. Run the appropriate script based on your requirement: +4. Run the appropriate script based on your requirement: - **To check quota for a specific model and capacity:** + **To check quota for the deployment** ```sh - ./quota_check_params.sh [] (e.g., gpt-4o-mini:30,text-embedding-ada-002:20 eastus) + ./quota_check_params.sh ``` + - Refer to [Input Formats](#input-formats) for detailed commands. - **To check available quota across all regions for supported models:** - - ```sh - ./quota_check_all_regions.sh - ``` -2. If you see the error `_bash: az: command not found_`, install Azure CLI: +5. If you see the error `_bash: az: command not found_`, install Azure CLI: ```sh curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash az login ``` -3. Rerun the script after installing Azure CLI. - - **Parameters** - - ``: The name and required capacity for each model, in the format model_name:capacity (**e.g., gpt-4o-mini:30,text-embedding-ada-002:20**). - - `[] (optional)`: The Azure region to check first. If not provided, all supported regions will be checked (**e.g., eastus**). +6. Rerun the script after installing Azure CLI. diff --git a/infra/scripts/quota_check_all_regions.sh b/infra/scripts/quota_check_all_regions.sh deleted file mode 100644 index 859e07a10..000000000 --- a/infra/scripts/quota_check_all_regions.sh +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/bash - -# Pre-defined list of models to check -MODEL_NAMES=("gpt-4o" "gpt-4o-mini" "text-embedding-ada-002" "gpt-3.5-turbo" "gpt-4") - -echo "πŸ”„ Fetching available Azure subscriptions..." -SUBSCRIPTIONS=$(az account list --query "[?state=='Enabled'].{Name:name, ID:id}" --output tsv) -SUB_COUNT=$(echo "$SUBSCRIPTIONS" | wc -l) - -if [ "$SUB_COUNT" -eq 1 ]; then - AZURE_SUBSCRIPTION_ID=$(echo "$SUBSCRIPTIONS" | awk '{print $2}') - echo "βœ… Using the only available subscription: $AZURE_SUBSCRIPTION_ID" -else - echo "Multiple subscriptions found:" - echo "$SUBSCRIPTIONS" | awk '{print NR")", $1, "-", $2}' - while true; do - echo "Enter the number of the subscription to use:" - read SUB_INDEX - if [[ "$SUB_INDEX" =~ ^[0-9]+$ ]] && [ "$SUB_INDEX" -ge 1 ] && [ "$SUB_INDEX" -le "$SUB_COUNT" ]; then - AZURE_SUBSCRIPTION_ID=$(echo "$SUBSCRIPTIONS" | awk -v idx="$SUB_INDEX" 'NR==idx {print $2}') - echo "βœ… Selected Subscription: $AZURE_SUBSCRIPTION_ID" - break - else - echo "❌ Invalid selection. Please enter a valid number from the list." - fi - done -fi - -az account set --subscription "$AZURE_SUBSCRIPTION_ID" - -echo "🎯 Active Subscription: $(az account show --query '[name, id]' --output tsv)" -echo "πŸ”„ Fetching Azure regions..." - -REGIONS=$(az account list-locations --query "[].name" --output tsv) - -echo "βœ… Retrieved Azure regions. Checking availability..." - -# Array to store table data -declare -a TABLE_ROWS -INDEX=1 - -# Loop through all regions -for REGION in $REGIONS; do - REGION=$(echo "$REGION" | xargs) - echo "----------------------------------------" - echo "πŸ” Checking region: $REGION" - QUOTA_INFO=$(az cognitiveservices usage list --location "$REGION" --output json) - if [ -z "$QUOTA_INFO" ]; then - echo "⚠️ WARNING: Failed to retrieve quota for region $REGION. Skipping." - continue - fi - - for MODEL_NAME in "${MODEL_NAMES[@]}"; do - for MODEL_PREFIX in "OpenAI.Standard" "OpenAI.GlobalStandard"; do - FULL_MODEL_NAME="${MODEL_PREFIX}.$MODEL_NAME" - MODEL_INFO=$(echo "$QUOTA_INFO" | awk -v model="\"value\": \"$FULL_MODEL_NAME\"" ' - BEGIN { RS="},"; FS="," } - $0 ~ model { print $0 } - ') - if [ -z "$MODEL_INFO" ]; then - continue - fi - - CURRENT_VALUE=$(echo "$MODEL_INFO" | awk -F': ' '/"currentValue"/ {print $2}' | tr -d ',' | tr -d ' ') - LIMIT=$(echo "$MODEL_INFO" | awk -F': ' '/"limit"/ {print $2}' | tr -d ',' | tr -d ' ') - CURRENT_VALUE=${CURRENT_VALUE:-0} - LIMIT=${LIMIT:-0} - CURRENT_VALUE=$(echo "$CURRENT_VALUE" | cut -d'.' -f1) - LIMIT=$(echo "$LIMIT" | cut -d'.' -f1) - - AVAILABLE=$((LIMIT - CURRENT_VALUE)) - - TABLE_ROWS+=("$(printf "| %-4s | %-20s | %-49s | %-9s | %-9s | %-9s |" "$INDEX" "$REGION" "$FULL_MODEL_NAME" "$LIMIT" "$CURRENT_VALUE" "$AVAILABLE")") - - INDEX=$((INDEX + 1)) - done - done - echo "----------------------------------------" -done - -# Print table header -echo "----------------------------------------------------------------------------------------------------------" -printf "| %-4s | %-20s | %-49s | %-9s | %-9s | %-9s |\n" "No." "Region" "Model Name" "Limit" "Used" "Available" -echo "----------------------------------------------------------------------------------------------------------" - -for ROW in "${TABLE_ROWS[@]}"; do - echo "$ROW" -done - -echo "----------------------------------------------------------------------------------------------------------" -echo "➑️ To request a quota increase, visit: https://aka.ms/oai/stuquotarequest" -echo "βœ… Script completed." diff --git a/infra/scripts/quota_check_params.sh b/infra/scripts/quota_check_params.sh index 2037fd3ce..79410dc80 100644 --- a/infra/scripts/quota_check_params.sh +++ b/infra/scripts/quota_check_params.sh @@ -1,50 +1,10 @@ #!/bin/bash -# Default Models and Capacities (Comma-separated) -DEFAULT_MODELS="gpt-4o-mini,text-embedding-ada-002,gpt-4o,gpt-4" -DEFAULT_CAPACITY="30,80,30,30" # Each model will be paired with a capacity in order +# Default Models and Capacities (Comma-separated in "model:capacity" format) +DEFAULT_MODEL_CAPACITY="gpt-4o:30,gpt-4o-mini:30,text-embedding-ada-002:80,gpt-4:30,gpt-3.5-turbo:30" -# Convert the comma-separated strings into arrays -IFS=',' read -r -a MODEL_NAMES <<< "$DEFAULT_MODELS" -IFS=',' read -r -a CAPACITIES <<< "$DEFAULT_CAPACITY" - -# Default Regions to check (Comma-separated, now configurable) -DEFAULT_REGIONS="eastus,uksouth,eastus2,northcentralus,swedencentral,westus,westus2,southcentralus,canadacentral" -IFS=',' read -r -a DEFAULT_REGION_ARRAY <<< "$DEFAULT_REGIONS" # Split into an array - -# Read parameters (if any) -IFS=',' read -r -a MODEL_CAPACITY_PAIRS <<< "$1" # Split the comma-separated model and capacity pairs into an array -USER_REGION="$2" - -# If no parameters are passed, use default models and regions -if [ ${#MODEL_CAPACITY_PAIRS[@]} -lt 1 ]; then - echo "No parameters provided, using default models: ${MODEL_NAMES[*]} with respective capacities: ${CAPACITIES[*]}" - # Use default models and their respective capacities - for i in "${!MODEL_NAMES[@]}"; do - MODEL_CAPACITY_PAIRS+=("${MODEL_NAMES[$i]}:${CAPACITIES[$i]}") - done -else - echo "Using provided model and capacity pairs: ${MODEL_CAPACITY_PAIRS[*]}" -fi - -# Extract model names and required capacities into arrays -declare -a FINAL_MODEL_NAMES -declare -a FINAL_CAPACITIES - -for PAIR in "${MODEL_CAPACITY_PAIRS[@]}"; do - MODEL_NAME=$(echo "$PAIR" | cut -d':' -f1) - CAPACITY=$(echo "$PAIR" | cut -d':' -f2) - - if [ -z "$MODEL_NAME" ] || [ -z "$CAPACITY" ]; then - echo "❌ ERROR: Invalid model and capacity pair '$PAIR'. Both model and capacity must be specified." - exit 1 - fi - - FINAL_MODEL_NAMES+=("$MODEL_NAME") - FINAL_CAPACITIES+=("$CAPACITY") -done - -echo "πŸ”„ Using Models: ${FINAL_MODEL_NAMES[*]} with respective Capacities: ${FINAL_CAPACITIES[*]}" +# Convert the comma-separated string into an array +IFS=',' read -r -a MODEL_CAPACITY_PAIRS <<< "$DEFAULT_MODEL_CAPACITY" echo "πŸ”„ Fetching available Azure subscriptions..." SUBSCRIPTIONS=$(az account list --query "[?state=='Enabled'].{Name:name, ID:id}" --output tsv) @@ -78,17 +38,56 @@ fi az account set --subscription "$AZURE_SUBSCRIPTION_ID" echo "🎯 Active Subscription: $(az account show --query '[name, id]' --output tsv)" +# Default Regions to check (Comma-separated, now configurable) +DEFAULT_REGIONS="eastus,uksouth,eastus2,northcentralus,swedencentral,westus,westus2,southcentralus,canadacentral" +IFS=',' read -r -a DEFAULT_REGION_ARRAY <<< "$DEFAULT_REGIONS" + +# Read parameters (if any) +IFS=',' read -r -a USER_PROVIDED_PAIRS <<< "$1" +USER_REGION="$2" + +IS_USER_PROVIDED_PAIRS=false + +if [ ${#USER_PROVIDED_PAIRS[@]} -lt 1 ]; then + echo "No parameters provided, using default model-capacity pairs: ${MODEL_CAPACITY_PAIRS[*]}" +else + echo "Using provided model and capacity pairs: ${USER_PROVIDED_PAIRS[*]}" + IS_USER_PROVIDED_PAIRS=true + MODEL_CAPACITY_PAIRS=("${USER_PROVIDED_PAIRS[@]}") +fi + +declare -a FINAL_MODEL_NAMES +declare -a FINAL_CAPACITIES +declare -a TABLE_ROWS + +for PAIR in "${MODEL_CAPACITY_PAIRS[@]}"; do + MODEL_NAME=$(echo "$PAIR" | cut -d':' -f1 | tr '[:upper:]' '[:lower:]') + CAPACITY=$(echo "$PAIR" | cut -d':' -f2) + + if [ -z "$MODEL_NAME" ] || [ -z "$CAPACITY" ]; then + echo "❌ ERROR: Invalid model and capacity pair '$PAIR'. Both model and capacity must be specified." + exit 1 + fi + + FINAL_MODEL_NAMES+=("$MODEL_NAME") + FINAL_CAPACITIES+=("$CAPACITY") + +done + +echo "πŸ”„ Using Models: ${FINAL_MODEL_NAMES[*]} with respective Capacities: ${FINAL_CAPACITIES[*]}" +echo "----------------------------------------" + # Check if the user provided a region, if not, use the default regions if [ -n "$USER_REGION" ]; then echo "πŸ” User provided region: $USER_REGION" - IFS=',' read -r -a REGIONS <<< "$USER_REGION" # Split into an array using comma + IFS=',' read -r -a REGIONS <<< "$USER_REGION" else echo "No region specified, using default regions: ${DEFAULT_REGION_ARRAY[*]}" REGIONS=("${DEFAULT_REGION_ARRAY[@]}") + APPLY_OR_CONDITION=true fi echo "βœ… Retrieved Azure regions. Checking availability..." -declare -a TABLE_ROWS INDEX=1 VALID_REGIONS=() @@ -96,75 +95,101 @@ for REGION in "${REGIONS[@]}"; do echo "----------------------------------------" echo "πŸ” Checking region: $REGION" - # Fetch quota information for the region - QUOTA_INFO=$(az cognitiveservices usage list --location "$REGION" --output json) + QUOTA_INFO=$(az cognitiveservices usage list --location "$REGION" --output json | tr '[:upper:]' '[:lower:]') if [ -z "$QUOTA_INFO" ]; then echo "⚠️ WARNING: Failed to retrieve quota for region $REGION. Skipping." continue fi - # Initialize a flag to track if all models have sufficient quota in the region - ALL_MODELS_AVAILABLE=true + TEXT_EMBEDDING_AVAILABLE=false + AT_LEAST_ONE_MODEL_AVAILABLE=false + TEMP_TABLE_ROWS=() for index in "${!FINAL_MODEL_NAMES[@]}"; do MODEL_NAME="${FINAL_MODEL_NAMES[$index]}" REQUIRED_CAPACITY="${FINAL_CAPACITIES[$index]}" + FOUND=false + INSUFFICIENT_QUOTA=false - echo "πŸ” Checking model: $MODEL_NAME with required capacity: $REQUIRED_CAPACITY" - - # Extract model quota information - MODEL_INFO=$(echo "$QUOTA_INFO" | awk -v model="\"value\": \"OpenAI.Standard.$MODEL_NAME\"" ' - BEGIN { RS="},"; FS="," } - $0 ~ model { print $0 } - ') - - if [ -z "$MODEL_INFO" ]; then - echo "⚠️ WARNING: No quota information found for model: OpenAI.Standard.$MODEL_NAME in $REGION. Skipping." - ALL_MODELS_AVAILABLE=false - break # If any model is not available, no need to check further for this region - fi - - CURRENT_VALUE=$(echo "$MODEL_INFO" | awk -F': ' '/"currentValue"/ {print $2}' | tr -d ',' | tr -d ' ') - LIMIT=$(echo "$MODEL_INFO" | awk -F': ' '/"limit"/ {print $2}' | tr -d ',' | tr -d ' ') - - CURRENT_VALUE=${CURRENT_VALUE:-0} - LIMIT=${LIMIT:-0} - - CURRENT_VALUE=$(echo "$CURRENT_VALUE" | cut -d'.' -f1) - LIMIT=$(echo "$LIMIT" | cut -d'.' -f1) - - AVAILABLE=$((LIMIT - CURRENT_VALUE)) - - echo "βœ… Model: OpenAI.Standard.$MODEL_NAME | Used: $CURRENT_VALUE | Limit: $LIMIT | Available: $AVAILABLE" - - # Check if quota is sufficient - if [ "$AVAILABLE" -lt "$REQUIRED_CAPACITY" ]; then - echo "❌ ERROR: 'OpenAI.Standard.$MODEL_NAME' in $REGION has insufficient quota. Required: $REQUIRED_CAPACITY, Available: $AVAILABLE" - echo "➑️ To request a quota increase, visit: https://aka.ms/oai/stuquotarequest" - ALL_MODELS_AVAILABLE=false + if [ "$MODEL_NAME" = "text-embedding-ada-002" ]; then + MODEL_TYPES=("openai.standard.$MODEL_NAME") else - TABLE_ROWS+=("$(printf "| %-4s | %-20s | %-35s | %-10s | %-10s | %-10s |" "$INDEX" "$REGION" "$MODEL_NAME" "$LIMIT" "$CURRENT_VALUE" "$AVAILABLE")") - - INDEX=$((INDEX + 1)) + MODEL_TYPES=("openai.standard.$MODEL_NAME" "openai.globalstandard.$MODEL_NAME") fi + + for MODEL_TYPE in "${MODEL_TYPES[@]}"; do + FOUND=false + INSUFFICIENT_QUOTA=false + echo "πŸ” Checking model: $MODEL_NAME with required capacity: $REQUIRED_CAPACITY ($MODEL_TYPE)" + + MODEL_INFO=$(echo "$QUOTA_INFO" | awk -v model="\"value\": \"$MODEL_TYPE\"" ' + BEGIN { RS="},"; FS="," } + $0 ~ model { print $0 } + ') + + if [ -z "$MODEL_INFO" ]; then + FOUND=false + echo "⚠️ WARNING: No quota information found for model: $MODEL_NAME in region: $REGION for model type: $MODEL_TYPE." + continue + fi + + if [ -n "$MODEL_INFO" ]; then + FOUND=true + CURRENT_VALUE=$(echo "$MODEL_INFO" | awk -F': ' '/"currentvalue"/ {print $2}' | tr -d ',' | tr -d ' ') + LIMIT=$(echo "$MODEL_INFO" | awk -F': ' '/"limit"/ {print $2}' | tr -d ',' | tr -d ' ') + + CURRENT_VALUE=${CURRENT_VALUE:-0} + LIMIT=${LIMIT:-0} + + CURRENT_VALUE=$(echo "$CURRENT_VALUE" | cut -d'.' -f1) + LIMIT=$(echo "$LIMIT" | cut -d'.' -f1) + + AVAILABLE=$((LIMIT - CURRENT_VALUE)) + echo "βœ… Model: $MODEL_TYPE | Used: $CURRENT_VALUE | Limit: $LIMIT | Available: $AVAILABLE" + + if [ "$AVAILABLE" -ge "$REQUIRED_CAPACITY" ]; then + FOUND=true + if [ "$MODEL_NAME" = "text-embedding-ada-002" ]; then + TEXT_EMBEDDING_AVAILABLE=true + fi + AT_LEAST_ONE_MODEL_AVAILABLE=true + TEMP_TABLE_ROWS+=("$(printf "| %-4s | %-20s | %-60s | %-10s | %-10s | %-10s |" "$INDEX" "$REGION" "$MODEL_TYPE" "$LIMIT" "$CURRENT_VALUE" "$AVAILABLE")") + else + INSUFFICIENT_QUOTA=true + fi + fi + + if [ "$FOUND" = false ]; then + echo "❌ No models found for model: $MODEL_NAME in region: $REGION (${MODEL_TYPES[*]})" + elif [ "$INSUFFICIENT_QUOTA" = true ]; then + echo "⚠️ Model $MODEL_NAME in region: $REGION has insufficient quota (${MODEL_TYPES[*]})." + fi + done done - # If all models have sufficient quota, add region to valid regions - if [ "$ALL_MODELS_AVAILABLE" = true ]; then - echo "βœ… All models have sufficient quota in $REGION." +if { [ "$IS_USER_PROVIDED_PAIRS" = true ] && [ "$INSUFFICIENT_QUOTA" = false ] && [ "$FOUND" = true ]; } || { [ "$TEXT_EMBEDDING_AVAILABLE" = true ] && { [ "$APPLY_OR_CONDITION" != true ] || [ "$AT_LEAST_ONE_MODEL_AVAILABLE" = true ]; }; }; then VALID_REGIONS+=("$REGION") + TABLE_ROWS+=("${TEMP_TABLE_ROWS[@]}") + INDEX=$((INDEX + 1)) + elif [ ${#USER_PROVIDED_PAIRS[@]} -eq 0 ]; then + echo "🚫 Skipping $REGION as it does not meet quota requirements." fi + done -# Print table header -echo "----------------------------------------------------------------------------------------------------------" -printf "| %-4s | %-20s | %-35s | %-10s | %-10s | %-10s |\n" "No." "Region" "Model Name" "Limit" "Used" "Available" -echo "----------------------------------------------------------------------------------------------------------" +if [ ${#TABLE_ROWS[@]} -eq 0 ]; then + echo "----------------------------------------------------------------------------------------------------------" -for ROW in "${TABLE_ROWS[@]}"; do - echo "$ROW" -done + echo "❌ No regions have sufficient quota for all required models. Please request a quota increase: https://aka.ms/oai/stuquotarequest" +else + echo "----------------------------------------------------------------------------------------------------------" + printf "| %-4s | %-20s | %-60s | %-10s | %-10s | %-10s |\n" "No." "Region" "Model Name" "Limit" "Used" "Available" + echo "----------------------------------------------------------------------------------------------------------" + for ROW in "${TABLE_ROWS[@]}"; do + echo "$ROW" + done + echo "----------------------------------------------------------------------------------------------------------" + echo "➑️ To request a quota increase, visit: https://aka.ms/oai/stuquotarequest" +fi -echo "----------------------------------------------------------------------------------------------------------" -echo "➑️ To request a quota increase, visit: https://aka.ms/oai/stuquotarequest" -echo "βœ… Script completed." \ No newline at end of file +echo "βœ… Script completed." From 5f2071a79cd21d44f308fc476bd71657f5e28f7f Mon Sep 17 00:00:00 2001 From: "Priyanka Singhal (Persistent Systems Inc)" Date: Tue, 1 Apr 2025 18:16:26 +0530 Subject: [PATCH 03/27] removed / from thr doc --- docs/quota_check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/quota_check.md b/docs/quota_check.md index a15a964d7..39efd5f1e 100644 --- a/docs/quota_check.md +++ b/docs/quota_check.md @@ -1,6 +1,6 @@ ## Check Quota Availability Before Deployment -Before deploying the accelerator, **ensure sufficient quota availability** for the required model. \ +Before deploying the accelerator, **ensure sufficient quota availability** for the required model. ### πŸ“Œ Default Models & Capacities: ``` From 30bd86d7306e91c30b455954c2af4de559a81eb2 Mon Sep 17 00:00:00 2001 From: "Priyanka Singhal (Persistent Systems Inc)" Date: Tue, 1 Apr 2025 18:19:13 +0530 Subject: [PATCH 04/27] updated image --- docs/Images/quota-check-output.png | Bin 0 -> 12857 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/Images/quota-check-output.png diff --git a/docs/Images/quota-check-output.png b/docs/Images/quota-check-output.png new file mode 100644 index 0000000000000000000000000000000000000000..9c80e329886cb9619eef2a49e493d9535e9482c7 GIT binary patch literal 12857 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 literal 0 HcmV?d00001 From d44b38400d00c9e2e4e4d2787a8678bdfb8fe2c0 Mon Sep 17 00:00:00 2001 From: "Priyanka Singhal (Persistent Systems Inc)" Date: Tue, 1 Apr 2025 18:33:42 +0530 Subject: [PATCH 05/27] updated script --- infra/scripts/quota_check_params.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/infra/scripts/quota_check_params.sh b/infra/scripts/quota_check_params.sh index 79410dc80..8cebd9b8e 100644 --- a/infra/scripts/quota_check_params.sh +++ b/infra/scripts/quota_check_params.sh @@ -153,7 +153,7 @@ for REGION in "${REGIONS[@]}"; do TEXT_EMBEDDING_AVAILABLE=true fi AT_LEAST_ONE_MODEL_AVAILABLE=true - TEMP_TABLE_ROWS+=("$(printf "| %-4s | %-20s | %-60s | %-10s | %-10s | %-10s |" "$INDEX" "$REGION" "$MODEL_TYPE" "$LIMIT" "$CURRENT_VALUE" "$AVAILABLE")") + TEMP_TABLE_ROWS+=("$(printf "| %-4s | %-20s | %-43s | %-10s | %-10s | %-10s |" "$INDEX" "$REGION" "$MODEL_TYPE" "$LIMIT" "$CURRENT_VALUE" "$AVAILABLE")") else INSUFFICIENT_QUOTA=true fi @@ -178,17 +178,17 @@ if { [ "$IS_USER_PROVIDED_PAIRS" = true ] && [ "$INSUFFICIENT_QUOTA" = false ] & done if [ ${#TABLE_ROWS[@]} -eq 0 ]; then - echo "----------------------------------------------------------------------------------------------------------" + echo "--------------------------------------------------------------------------------------------------------------------" echo "❌ No regions have sufficient quota for all required models. Please request a quota increase: https://aka.ms/oai/stuquotarequest" else - echo "----------------------------------------------------------------------------------------------------------" - printf "| %-4s | %-20s | %-60s | %-10s | %-10s | %-10s |\n" "No." "Region" "Model Name" "Limit" "Used" "Available" - echo "----------------------------------------------------------------------------------------------------------" + echo "---------------------------------------------------------------------------------------------------------------------" + printf "| %-4s | %-20s | %-43s | %-10s | %-10s | %-10s |\n" "No." "Region" "Model Name" "Limit" "Used" "Available" + echo "---------------------------------------------------------------------------------------------------------------------" for ROW in "${TABLE_ROWS[@]}"; do echo "$ROW" done - echo "----------------------------------------------------------------------------------------------------------" + echo "---------------------------------------------------------------------------------------------------------------------" echo "➑️ To request a quota increase, visit: https://aka.ms/oai/stuquotarequest" fi From d0fb707817bca62a6ee3cc1eaeef5b53130a8ce6 Mon Sep 17 00:00:00 2001 From: "Priyanka Singhal (Persistent Systems Inc)" Date: Tue, 1 Apr 2025 19:43:59 +0530 Subject: [PATCH 06/27] updated script --- docs/quota_check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/quota_check.md b/docs/quota_check.md index 39efd5f1e..9c2d6c9a4 100644 --- a/docs/quota_check.md +++ b/docs/quota_check.md @@ -65,7 +65,7 @@ The final table lists regions with available quota. You can select any of these ![git_bash](images/git_bash.png) 3. Navigate to the `scripts` folder where the script files are located and make the script as executable: ```sh - cd scripts + cd infra/scripts chmod +x quota_check_params.sh ``` 4. Run the appropriate script based on your requirement: From b6b06d089e97ecc75cb8d380c0b5b03857133d20 Mon Sep 17 00:00:00 2001 From: "Priyanka Singhal (Persistent Systems Inc)" Date: Tue, 1 Apr 2025 19:45:27 +0530 Subject: [PATCH 07/27] updated image --- docs/Images/git_bash.png | Bin 0 -> 30005 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/Images/git_bash.png diff --git a/docs/Images/git_bash.png b/docs/Images/git_bash.png new file mode 100644 index 0000000000000000000000000000000000000000..0e9f53a1233e4060da6a9ad52f2536ea69099bb3 GIT binary patch literal 30005 zcmc$G2UL?=yC%nm1;H*V#R4L|2}n!ypmgcIMWokAuOY_<(v{v3>0NqHR1~C34GV6d2)t7l>8=L;`@=&==}(5TUbY4B;(*|Osf-j=~dOEAaA|mS1 z%04#ouuKC!ZKa=oWxu+Fch$uKj_l;Jk6{hRgHc=?ZiEOeo=Dq<{Yuv+9{0vwm|nCj zi&mexr!j5T?HPa2<;&<_y3g!XYIUz_^oOo;>etjbVV-i`I8x|~9vL`QgG5uCea6T` zbwN!9B_+;UV6=b#IaAO##`F7ymh#~bfBbrJu=GWi_OI{1PDy$#>P?cK3)^?b@$&KU zRZ2y_X#MumYEh3m0;d{`*f8zQNs*Tg(F6IM$P!J+&c`V^+kfu$l|yoJVW`?+a5+|K z_Sj(F0*bO)rP;eM9St3+;Wu24Z9j15)~`oJjARQJOl#7fhpi08x=s$1A}clH9&#R> z-K5?=8PIAjMjr?*S9pvkI;{2E7tj1bh~M2Z3zVEt{I>(&e%(Ywb&%#8%`6mX*oLM& zZt2k5Mb{IsBZ1qr29+ib`nx@lK3~c}#0B?TY{ZUp#Why=tJLX1;lwGY0%cAwAL@0>s0QGKT>bhe08h4^uUz9SP6)M7n4$6MTnT5ix*%Em@BO>Uu}3O z&wC0@Z|#+{npl}0{nui|6k9izSu9k7#p>c79QIkD)oS*ZN0!QL+tm;Yjco!7X6+|B z#KIs_kds~sS=tGU3+9>&T^)&3{EvV=DNo~pf#XeELr-m=PVMlcr?&kPcDAyZT_%ft z#A|W|2J<(hO1oZl9?#4$hv=Bjxwq!qozLiLPEYWPY_W`b zTyCaRg00+gSSbq9G;QJ>Da#L@3k&Zn7HDstSS#EM!?_D|5}v_Jw^|Kz%b~?e&bV_g zI9o*_M?ErM;x9$#L_}_7%?8fOlqZ)(E>muKwu~kgvM@U=L9hp}=4M{lI6vIz0&WJMwb?1{s^LVh*LzFV@@>xqVn2Gw zSj+KHZL~Cds?-saUpzRQ3!Wky^#)^4_i>7$dpEmbhX`@O7O5NvZAO~st0`Leu>X4d zfH=}ms|*uE>lNv1Ghi18xL-^Q`~kh5Odj4FyCY#{Tsm(d$`dJ1kydS(3T~i@n;|P< z=!Dt^pB03_rdOtSc}HU@k+h!c?~iHqhc8*Qq)sP|B}xn7b&n9eQt|q&lXWQo3P{>1kCe7yvb z7nPFU3?XZ2E-VOOt34GKr8SSg&s9ipkA@uK^g zJpEG_)zxWg0XiP=PL5}$W_ux3$r+%O-#xU+D&P@-_6*ll%*W_?j5;yuM%){g z9oQgSexT%Nn_cqA)N)ynC0pcu#o8`(Dh>JEXc5y@TOz!e>MtHyTbYM{Mgp@dQFnC< zE%QNV$K;D47_`eabSO7J@nf9OB`hqthqUpll#Hp0=i#xYiH%d7U(zaPFfL__J)CO% zx~QPdh>Pc1%6Ynr7|UMd6VLMEtZIFyVRN=2;`dwZUy`N$%d+DB*R(To8GP+D>A1jk#Rxo5c2`N zTo!cqsUu~`P4vy>K(Nd?OBV*Ba#@zTIGgi*xO>v|OIVs#vYvSEsN%Fnb$4H6OxCD1 zdCM0cv2M@i^uRslD`*-Y%NrMW{9@>V&2%U6VQF z1J>ON6n4n zkf(MW8QCP{KyF!PGaR*}$+Z5p8s9mqjiad*qthyo1C#!ou{pWJ+%goFM6VsrUe#lX z%#(}?@>`xOgdvufiX~=h=T+@!miAK-_#;*~C;{!CSFth115I`%oR0+bsUNCj9#S}y zUlF?+X~sC8N?)IHW&-4mosTiP|8GxaJ&iUmi9r?1IB6sak?^H)0mL)M&B$6%%Fb<7 z9~B+_(6mfq@~39+{m{wm^GG(D4@PqebGuNj2D&;x;pt8q{!xm}qWl zy&B%>mE#~eLVU9|Z2PSY(e9kJjUNnAFH1FMEL9nq{rnE~Z%T z(v4AHN_{jZH2g$cuL4^h=}bv7aY$u4E`D5k&BGiotnC-PKeN=taJEWsB4F&Ck@?6a zs9f>Ex%%xwkmlCcKcV-Ybyk&moKZllTZf8%phDvlBy-T8ys0yY9>1-7!>-O>-jHH5 zZ!_ns38OYp=Uf6sbH6tc`wSfSsA{vv4xMEpS8wet_#l1HbcLJ+JD}uAyp5c@ zfKyeK7zi4h3Bq+Oo3GrDaDi}~CDM29k+6wm)7|}u_3_n(aE^px;n$^_(EQrIi`7fe z+M;3drX5W&oNG9tr~fvLi0{^{3p}=$9Gp8qF<*=s@|rE0lWWxRC_~&>P$0yY4XJX6 z9XcJf20zX&lgTP+^Je=;q%SLqnCc%y!2h5&u|DCqI{_*2slhN&PwB(EGVfEf0~QAT zz5QTq(A_Ge1j72ezPFQpYKd7ILooCZ6hqhplf0hE8ZFtrcDTU|HIV;sX%tIOhSz)7 zU!Gzq+-}+z^fD=$FmyU_3kLZVdM%EWC;fiAY!qJ+4_GHz+m-xq{Q> z_U9R76o4WX$}@~#*VME|;?f+_0mkoJd^J_ZbmjZZ5MjR9>&D{6xsb%w=p6Kh4 zbhbiHbb&m+eLlQcf8}bf+}lAB=3J&0F>NL!&9u465GPx8+bN{QyWKQ!G$xB>>N}@D zF`4v$cttxXs0GSB5gncEN~_h_-JjjW@x`_gp9m?AY6yKagKvMR(1!9e)1^xXM>0u!+ITgx`}$4lcQS=| zkDH0lKiepE%2xs2ydJzqdaqzYoex!?jelDf=%z*6jxF9FC_&5^4GP1@z>n6J{}Cot>Rx%dI-{EBu&O zObU+#CcoMIZfJQ7i%V6+kRK%)*(X-rWz>brOdcPs6Qqt}qZ{=7I#EFd z3bkSDLsmDLPra|3{jrpet~3`;?sbZ?N(kWWB0R$z%Rdwn^Fr_@KuXOula;0h`cM%= zUOAjJU)n)C6c19X0h3v&f!(R)EZ+0kYT;CM(v8YQAVIa_NWGM3LBR;8!212>grE95 zPH9Cy&Lr26d1_=vPxLP$Q%g336ieU7FH*vX!)~(0E!BL~;*CZn4d9c}Y>r(-e7#A_ zwiHCrA6iisIl$2+`6=;i97SHCJf1xc&#%Ce$+}&L`~f{>WwUyEqqJE7*=FhFK1m}6 z$Of_ZEUGevSelkmEmV-@to!Lz-O@mDEom?J(szZ1X2W!{1-q1IWL|TkDM@}MNpN_u z$v9F?Pmeo2bPitJBQJ3eX8`v9gK4S22L{mH7h@My9 zwameOU}-zj(lR6V?KB&BS6eBRy0nrqIQAOO{?j%^@?*2g-3@j`csJQmV1 z$FlXE<=g^i=2#ZGMvD7P;)L@;BG;a7U3KLPm}k-AC@( zc7~k(&2QB6Fy%3&G2MefH|2e=14==H)%l(Kx!S?w_6>Lvz7SfQOIa(eRFWIw~J%bh`P>o+q15{%{`kAXAQyg!p!>5s#uQ$LgMOD7e_HJkXvQ_-4tl zybXqH`@)xf=fv+%KV)gN>q*JIAa45uus)YI-yXm1`t<2jGNBw<3fujDKJ4yQUKcAr zwb-8P`1 zVgLga@o{v96S4K`VTF+@#pv>{&Aol+ZO8-*WcxLQx}}RCFXZzM{-Mr9!XeSCXj%|r z?L8y!VEa|3dCTOVOLOB^m2J;JscGHe_m7V(4{Ab(!S^?vMg#(Mr%pcG|Mx`?2C596 zvM@6*s=>%HU?kIV5Qgg+(a=337qLV&21hK7PY;Rl-G`n1@JR*Ux3xaC-DeE0ba-m&ef+kZ_sp=Xherje_kMR-*!OnBTj8adkKyQJ?8?YgOMne)aEpUc5E^#>{(T1;hm&iaDLXs+(F6N7 z{9A}~CmUj^Z8P!Qhj9fX)+gky?EAL0(lFQ~U5kihYW*H4 z`yj+%lro-k0G~aM-e&yc^fcQ~it%=gnNZ^R`1qN_2f8`YI5=L?bs0O@-+!eJ>w=fG z-3>zT1|i42xsZyd?J*e4(&BLOhOe9>99}1dJLmKg&KfKuBXhXpm{!7Nxz&lKV5ZiW zmd!b_Rhi9dcb1N>+*-@A%?#wN5M0lkx2PaBbw#;gE_M+w1ZQFTR2sdt+m{jIFQ(e| zT$~XWYGo}MN%LOmsk9vCWmX~Yp8?{XQTV5a<8|;%IgaRymoCkE%Cwg{j(5(wJ1mWq zHa`0H1iTNvrhKQ5H<$?pU_>oh>E7s#pAsC43U8n8?@gE0H#C$gVmazMQE!eKptmrS2tcw)4)#y!TL6uW6soNX$l zYNDNgu(zPsdoC=t6g!wQsyJ(g8^snZ?r5j)_8&gAf~|NM!l7xr$4~C>C`dcD7+iY$ z*95jh?_QM&+O4=(3cBCUUC1tgssHL{n zAW_I%hwD^@luFEpZ*Rf2sj8}W^EofA@h~#8iR4qLL4u~W>Rkzf;-s-g1abNS_3Qf} zXKshKhzsCOgUx=MItdq!KG&&bd~W&d&h|^g0lsS3fQn%MX6YrbJSd;t`kxemyrH9W zzVQtbw|s>BEc(u)xvz-|bnLeKD7VXaNiGh>%(L7Ow9-tX%}g&Mc`Leq1j=XpxHUm; z8wg{McG_#GtClwmLh_tD*L6Xje{=J3WT}5psIL1te#(WP{`PKi#=EJ;pWw(Y?f$Xk zTzN@J9A-)X7MmnRS;x(-!gaFICb({RczAJjH37R~prG)Sh{p*>w`ceEYPd`_k1b0D z5Sk4#pG%l>LvV4PM!KUbZn)U6CWz`!`Cdido{p|@7`&biMNXO7f_c>CS62@~ zj$N-fdFb1vVe(AiJQ9hq?!QWhBL9)nM#_{%?+Uh(sacX3&n#^mJW z94n?{y)<_CJ6LIu7{We1w7qPmt)0bhSe8`I&3oo(Aqr)IKp<@OeQunI;fjxoQ;rd` zXim~upPZN|p>GAYR?sDI&9u&y7m#A7LT|7!)8hu8uyA76?7+rsm)GvLTUAO^Qxmqt zk+aZ9Afe{s1fTSTir6!#|5icV;g0Nn`?f5ztFK;oFOR;eMC`avw;hj9OvLh7odOQq zhZK`8QEuKBcwcNcintWfQpJ_NVCd=n+`vA&$V&s$y}0Hy5O%a@Bv9UgU1zpqhqp?p z&zm_iAK~0I!rIpnQE{5(?al9@+iRBVhexCg43>S(HcN-cTSZ7N)zcNSi9dGc!wCt1 zz|0ur=jXd=it%)NwnUefKrS48bc=2Lt>x2wkN>K5!RCSKitpA&yG>%T{2{GZ61!}I zdqAYFFj7a-NXT*u9t{I8nL`x7g2m+cZO$btJaNX>-WRv+{>*xgr>3qhb$A-LN35%2 zrdZ-?^@|OXmyBy12I50i`szYA8bS!)}F30M;SC4VY^Gn4NO*ExNgBr=Qf-lSV z$T!o{Ev^Btb1G~pFF39{$kdwSpcmq84M$DIKDUw;U9wTN9}7L;ldJyU^;cSD2FnZH z$m|S!2|2j_O{X$Y`Df<%%gqXT!&>Zs;nl4gK0!eV{(Ob3muVXL9D!?h(&YmTUMb(@ z=H~VXNnW>Y9OCxv`iyk~+6Y>>X$`K>i%#hgL6_p)5JVWXFZ!t^6G z{_5%Vk8gR8oIN`*)@vm*2sIss@h5DKfBI;I+a$~=^QC*3WHlbtSQx(-pitCY3itdz z{FNu(O)qXnfINHp(fZyvdhag!B(?Cci;L41oW&IaRzN$dX%hyOC8p~e=;s^ES+$z19oDI z@@_CIDk)K4h*jY_)t{@DXwBO8g8!Ykib12D6>IQFscC*4F39xTBcm)WWskXT(P&Mf z+1c4J#cW#tI6gk!y}=B8i7{Dy9A2o@FUS^&fE>o~`}g{qW4c94r&)3$ z3?nkNk)EgofggtR72CIPRr7s@)im|Mh*gPDOQ=9={AfExqpCt87wL`&mL~d0HjLE$ zDa-s321S45?a|zFn7pNq6^Xe*EGT*(GIE~j(AmJC$Gs?P`_W0Y)y#w+J0IPQAB~6w z9{;s2X%9pSs1#B$3N^(>p59)c=CuljHF~OmT@3V{8>_OTLt^o@Umq@<>vja2NhRNeRZ-HUyTIqEFw)yx-8A3jhG z(gK3igp(jaK{)yP{^{I0xD&`-U95R%@?x>OOu8+!c!qUaP*Bi+XExDmt~9SjG36*rUjSqDJd5TTU(?451RoxiRU+5 zoK1vrtiR;*Nd-B`%c~|3lG$>^DyOJO73|Qxd-r1Eh_aln*;jvIMTTJdQiXr2w&^+- zF!;=xHF$AxacFqh2L6Fd>E174^|}P#hsPa}VZVzNhSd}Q$c(RF|Ax2>3`Z~ihqv#C zT@JKz(qi;3d8?W6=z5p823PD-l8c^`NWs^~>?s1KX|AVMTH6c`K7IeO?~mg?$r1RP zYOtdb^JK+3WcEUM=)>>0RDN$Z)HfTiM|3NCdNrT@d@-vbvQ^rpn!T6?%<&7sS6Yp-SK3br8vi*}f*CNE!H?B$dfQB* z_r>6?B>UBgRN4Q4S1s=o5omKC_ik5Ai+>3{$UL|O##WzoVv##NjcR?B36{mqm@%{* zE6hFq9opCOFjIDt4xj_wYc)`DX?V&2M)8Cz$I_6oU_a)%e~OfGt;f|4|84{O_Q&%z zU!6B(0#tZv?)F7*pH6h{T_DVOQ3g~TIySQpGgEhoP-|@6gxr~#fT{<@&P=hLCT*ZJ_gykAw53Bn ztrK*@9aUZ)pFB)tC6KgA-ora2}|!bk9iVvvyS$>>Ui6Ia~-nT*CNz9f%4?t6__eb66Mg3Kbvo?H$03*c#8bjlAZ-BUNyi%pW^bTvSW74yE1ebb7YQd)OhHg>o^mYR)<=fpZ^ao0hOV;ukO_s-2CEACI7sZxm z4nN^Z{Om9};@sX1arwl|?u#;Vir}~uO!Ii#D=aFe|B~+UFJ-Fhu67a` ztVtK1s}LIbB(ZLVD{@`vXdk8xT=W{T8Dm`9)l4yrc*6r5NLguL{d%$6t9&Mg#QN}Ts(d#W&g~uhoO2d{oQ+QOu7H8C)s;Q$t>bOz0 z&YQ%?yi(S@8EOq^*ax;EB{OUnrMJRW0~w z%s_Oqd#}_vj4^Rq`U8QNY6A8yN%;`t^m+op=l=aje}8{x`9IX}>g($tef}rC(9NmF z?YykIDwl1QE_2Dtv19YvrIC--6(*ZXrr#V0s&&26=L=lVESXhIYgW&UFC}ymvY;_i zwGg;NxM8y?|J`)8jA&Ya%C_p}Zu@lnQbPi-%~&rzgKg@&@D`Y8i<-({4JO7*G95u^iG8gIGHqo&imYTy{8m=AOj0H8 zbgz46rU^TsGOC$+;wJVmeV_K<@Msu$z}s3A_iDCzUPft*^q!AH=o4wa!LnAIf@+_w zkB&pobVyfFtM!&6Qr&)ieC_h-OTM;Ea1YL^3CY^)5IKqO!+Y8)^A^!atpHim-uz>)3E4X)}ZD$oau21 z5#DBh?F?Vov!@qz^IMG#8CK(aBhu2P(|ASA#oQUr#dN!~Ug!9wzuuj*xo$JwYq*si ztKB0tIB>Se^m6*Hb{@6+a%-*qG^YBap9VZRYgp8Uwx@D$-f-SkP5IEhm@QS3w1fA( zt80i}odu+Nx?Q$=ih_&LeAlpKwK^|~+F>40q*{X%EWSCDDIYur&J?HS;TMh#2kHz)v z2}U!ub7Q=0Gdk2ss!==Vu0LU$CU}G%?Hl^y?7M)`Q4HNgQAZE=YUd$DhLf*szt}g! zM#+d2%k-*a^6N`F*99B1?lf|3R-jh1qcfGDu*<_z+;JGRI4 zm*dLJ)zy5}lcUs{uTZ=aHZ3|tap{#XwF}&R6p{HG^AKfsA>%hYVT&bx;?eKyNt5Rk zBkgG=m1XelO^9PFTOT%o5cC3un`6}GU#xzYe2cTLN$^^d@E~<9Y@lv4Y6==#nSr*n zmbYy+!_+mQDjqdqW2|s1E(-HEFw~dXE(b7bir{)YW=y1Ae2F}8D}?s;Bz-BbzfQZe z{iRjRBhY+r)Ehyw9x|v&dJlZxML{`YykfF2{Gz)MQI)Gtzqhh{ zgdSu2#CSG)(kH-I;t5sll^4S2(UeDLpd4O#gz_y($RhS8t;6@m_U6#zu}~Z6 zbxYKCORGL(o9wQ7BH4OJLGq+oUPMcPX(i1qtuj3(1_sM8uh8~7R%VRK2uwX?rOWc% zvZLIUcEiUs<>Ol^JJ}vy+hJ@NJ3021K}xPNY)(0ctqP=!UI+Hfz~|n(9jADwAx05% z6Rys~n`&t?B=YA!=awteu>H{Im%>7nfwEUa93rzG*N!?3&I*%_n82xf7t#<^7CA2jMT1QG>fR1XLqnf(R8xV zv}hN%v_J&6@=a)U%cM)gDh*nw+FUh+>?rey4}%{FqnS5K}I+?zJJ zt*1ijBid!!*V#H6CPyz0#a4lUdNSz7F}iu4)&_Xoc-O6w_d5%6aA~Ayz*^U79OL7) zN;qlA=;C~w`T0$HzE_z3b{!)No!|Hy>(OJj5C-e|bEg$fPfkyxB&{-9;o-PHYkF zA8sc`mfn${%5><)ZTVH=n_OgbPp-m>ma%WLX1QT`0#c@?WC$0@G%Unk;g2@ybUA5L zwJ==F`b2Uy)wp8%_U?O=(AtQuiP563(^P+l9&f>$B%3Ugr_sgG*$MtuQMJjCtd(j~ zm8)75qIp{aTa)TfwSkT-bj4P(;j2ATA>{<$dEL2{=yD__C2^ouL3J`@$O9Tfx#IwQ z)hl7$*Tz{5)u&u;$7Jr@RomyZpbK*Lyfw0~5{=J+I|bt6B_~nHW4(D6v1(}}Hg?!v zXG(^PtQflw7Hky^LTa>FM4BPr;CbeHYEd6!D$_`Dq>&#gEkWLoGX#Rv6nzLHB+pvv z3(me}Qt3eSoi>kDJ_4H8jYtaXhpW}@xZ_yHa8QpG7@0D!g~rPmfE*0lj%e?F8h#@rPk1 zWaWLf)9$i^`=7}sw%cfYwhC5p7%*4MZjQb_xfl8PtgPqP9RPl)@2u$n7gVo#h%fZ+ z;ny$k&s=T>;|V`6oPfh~>c5sXNJ&Ylb{-SkB!r&k0iz7WJbBbAQtdh^b3a+^UX177 zuHQ}|%I(MpbD>0f@7}TVLO(vgy0)W9GjYSp>+3jD_**b#ezk|hmbPE{w@_n7} z3K1w2#6vlrku&hiM1E@s3!RB|t&_EpmE+Lte8dxePEbdL^(OzMlao_VEm)SGH0i;> zNHE`@0w2Rn^51NkHki}DXzKu}DxH8FD{WY_Z$FdWq-!1UCO}AVa~CBEo7KPG*l@?1 z=?I+Dg~Q7c?urBgq0ygE)Brq@tF%Zyl}skbF-WsA*&a{5_UeVC%Q%jWWjeVW@8jcBM_=?Onyn&R z@Ak9M!$yL%k{xIYr}MAUH`^<1y2K1F0%0;fAz_@y&TG0YG7gh{#C2tpxqW`KV|raV z1_&u)W!C@&eK9hnT&WQ^7MG9!o|&Uw6?Jm22OgvwY?-7#H}cJy&gCu)=BvewW3gV} zJ{$z>s`aEdcN9$ET$N_qt*gIuA@_*niY-lhBug(jZeU|AywhH;JDPE3_vGlRBvQpIw z01AY7ghi8gsgQZ2HFNqaPe7GdMT4jUm@m~P{f(?}V8nG&xzg@4F90PLE4lj_%yr<& z{7*XbLrHKg)JO~?nIYrFXCnY_717hywyZVvYnh63YXL?R79OrkwiZjF_I_IMEXn~L z&c>C2Np3qEHdURnJ6CRlLfQDFYrIp^nWp~0w}0*a)_xf_3K|;yv6<^05KE_gTj;1dQHZYFwsefNj>vs#cM{J%Xv zuR}hx?+*ls4h}2}OoyJ*3zJJO%2x0qdokK~#FQ#4>JTfBs!PLaWlfKh+b^NSMMfv&d&Zgjc z{SOTL}2U^o3XZCA#scvci%1ON&l{?DwJVPRohyemGC-?Bc#*9?!X zAKKFC8WIu`W2tQsKpvUvNu}H0pKET4|5vQxe?lhyKYRO8G+2lj9KKGoH#{%zI(t6Y$sAK!kr zd%@*)Iy~6&$GgY-=ZF#dteK%*vpS}xK<`Wed1$!5U(_-x60^jf=mJ*#^dgx}?YBbz zj`dN~B*>pb@8138=;*lIGtGB_Y+zteR8gS~dfV3dlRIL zsy;}SPggjR=$#Hhn1CQk%zL8nJ1j>$2Bh-6Y;AUEkQvB2b6e`e?HxsCXk6wglz)pw zm1-lHZE0yKUCS-}PM}a*4VcT#n+*Ex^?(`zENq(uXFu20$h0H}vN>+2*M}}T*ValR*27^#K*sEuJ{5Ww_}N3E zVbt`)mf8|*a#x{lzMj6m7Y1_Tg7CkVyr8Vi06Y-bI9+$v5@Ta_qLK-=HF&}jW_WBY zS@dOXs(e80llQMj%35Z)}evRzOGqa&74~rKlM**Xuww zJAV8)$O9s*LvQYdFHh!tbfar;l{VpEUN>FFZ|dvmeV$&o$Dt4@;&xGfOiGowhWbfY zpqM@X^Gbm3#d1tB*tFEM;}jC!5QxR#{$PMWqPlPuhon(sa$;gm0fkL|?cIJEuf@1# z3%IHTN`UhEqcjjG#;YA-qu6Ehq&?=WkCUp{&nI@}_M}P`S5=9-$a)+B+J$2Fv_UAc z?!>Rg6b3(A)?hGukki4U4`VR-f2&(PB}11JYbtZyQMc603bsTl~J5fSA!;ycb!0@m?LXsLR^ICV$1XM7Fr=nA;0xS0R(CB)*gUW=)3$Z2DtKL zMvgD5lTCsiQN2KqueNMGo59ShRmsDSBG5npR_>-tWh zZG5$t(aB`(>vKGh1Z$a||SZpy6zr}hQyMZj4 zq`#63xtk>IktYO032?WK27P_Z2xd`6Ptux*1ac#VxS}>@LGfKlzI*i~ zJ;m5;$D8%iWm4wocJc4(Zf-$G2}oGBtTLGt`ZPCxO`k z@YyrVcI(k)?z{I@qhwuHE*(AqPz7hMe2zFPlOt`93S37jWb_v3)G;3YiSbva`$~Jzq^@q=S7uJgPuuk#<(OeB$#(BieR5lwLvf1c6)v;*G<6htMx! z)9=`Uea0av74A)wK-F}>IA!qyAbhD>^T1E&aXtL~d*5aos=2Oic18w=spf+he@m2v zf?z$~yB#5Jl2TIG)VBNo9q150j5_bvVj*bJYy@__Lh39V->;T7kwWd0%<8Usze5|t zqmbX(8XU)s{EgNbw7&fRd^;ixvlLH99EYw8{I-n;Odtbzd3xSBaTt6RWM?b5)?ueg zzuuIPNT$fWB4S0DRwkQ#{&YUp#`#-geQ5_WI=0qD*UpZf?7qBn0oOxP9!+@+$L>;nc$ulPX(CV;x>^S4L#AW+V& z@$JZ+8$l=w0Tkm1YL`$!^+~A-#J{Usw|`^KmrB5;KwhE~HP=;QegRW}B&r-u5*UpC zE@?HPR6PKvfE<2F()lIVW{oAQ?Q?=MrO{02e!7f)WMm}hm!cPyAm?XR_JRr+)Y&W8 zI!!>oNX~<4RT)pNk|;IS9j81{{VDPhP(nKOI_0-{1EC^`UGSy@@3_W(k6W=^k6 zG{m0R<+%G#R5k|nC+K|BOyH6yj#|a!7{U<4X(PkKxr`jX@0dL4O9UW=a*Rg0OfEPS z%{5!o`b|qkrK5nX2*T%RMe78eX)vZQGib1k$$50E1XQe`rcA*G0CZke3R1q!lo=hk zfD9BQ@(3jIsy`6|QTNA4bhD6^3WjN@qMTo85`6rQb02~9*Ov5DL zK{`0%08#>dtN>%?Zgueha05!}RE2CdNZ{xcH$R1#keHZXjWy;>NajCa7;H1YX#|R0 zzH{M`d>@r8|3d-G#$24AuLP>1SWDJ9&sLG4(a{1>rGx6%38V*GQx_L{EqOEVv5TLd zpDF=_rdgO%-81}q8-_ymulwm(*`Imf4*vQ1 zn&JPbb7TE?&$qf`wx5x0$;=(Z#uxO6aF^rF?VUoRErZqT9~kt&`LbtQxw^<}N;pQM zEl0wUpO2VP1J|1uQlOq5tA?N<+Kv91Mrjg%qYepq!(iiei=WwV?D;igtwVv9!oXG^ zeh3QH&y?FLUx{r$_}d^?kDvvLD>V0s^sa&c@XK-j3fMRN_1&aT-KxUxZDaViR^|U~ z2XouxesVirXau^4LXbx(gOSH1w(*>AH4pu(WkuxrcT3W1LOauI;RPg>=s+!}aqlgb z)2I&#aDkd$XYHc8+I%6N02o8^@9{J25QkL>$T}k#Ka+bnjXkq|ZRxFiBI??P6FaqO z#+~ftwFnqm*{2r&!58)UDs!0oukO05xp** z^xI`Fps63HUaFLH;M`20^+Jfi)vz!W_3_^4sZXoLup#K+UqLUK#*oNyt=S#iapexj zbsSP_j}a0pZ2Srg=eVGiLB-yuzVCyG`JmE!;r#F_9rh%)-%0bYK*~JkPB%;erf%w}$_Bhb0`I)V%^lpY|lQu``N z`;Y$fTN_@&VbxIwIglc@{dE*VkZOMa+o+R4CP*4~uZ6^Z*gZRSasrfMJ4 z`FAv~ye^`{?Z;RC;kFjg6GIfzWIoM>iPLsR2}+5#4Rmw7dO%or$DwP#bnMx0VTR%7 z5tQmM4b?tpyY15xP5(@#xiN<`Ef!4R`FcfT`#TtosE61MhpD6#ZBT+ry9`eqhf&|` z8CPDN;KPXUzLWp!H;DLLh4!6|2-{l~r&i6>PvOi<-s8`y@rXm2Hlz2D`v-O_*%XqD z+78oJAIfJ3okb5^;`E-KfgZ1s-!pAYD>+P~GKP#$14s+VUGq7w{iG-VRUlAVAoXKt zLbDQoHBI{jZ3pm{7yp~Y@c5tBtpC;(-pOYH=dJu-yy^pR=jB+2h^i(pPH>*$Z)XPn z2^`!5Q>6XJ$Kv;B&qX-+bsPV|J)=-8dLui6_bEG?M?OAw)7x5tIgIxqiz<8J9sQ)o zz|+qF?0kHj=Whj)fg$$O|0KEm6aQF_fUN-}0lnLP zuzr(51td$QX2#ZrTLfTdW=NEkSW(sgnkth<#k_X~aJXe53iR4}EsZz;QujAD8f%&b z#Lh5i69!U((7mfC1FC*%G?j4<*<;tyxbjO68%bkfjuwR`nAJO(hrTq@wlm@@OGtx>D!TzwPJa_{Bi z!++*z$4~61bJgC})iuGA)uh2a*CJ?VHez@TP&J@Sdbq^6s(UAjP5KS!(f^Sh4H;-< zftH-+(NK;tc5r452JPlsQvrB~Phn?ca^GMrRuDf`r_}OzOIYl3{M3kzF@GC12pt4? zn}X(MvtOrZ=$H~T1y)nN8qEIgd^qI2F&goXUf&gu06z`Mm%d#{-M1T$5R<15}>3!Z$Sj~tYHznba+ zwmTc+Cc%HM0lAG%@yz$8FXHiuTy#y2eqL#I-FIN0lL}peqnDvB zo-*mc3Uz=^vn0O4I+Q6VaLpf9(n$@FK_EHIW|nwqhwEBpDt{x|mkGza)p2Jqs5 zb&`MMxG^IZGdu-q-4qC-vBlH?Y)+~aTr!#f^tRzIUmlbN00ckRptjo7H4BJN3^-UK zVb{wB2bAW%lxKX`CC7bZk!MdOU}PqhmG9fg9}oVyQB zXmHtN04&B21UOK)f=bq*ysN8Am&`*y?I4$*uaOQ8h5?)%`m2rK-T5W#H?n5n-m9|fs};Bp^j2FNFTno-X;AfV zEk%quSNCAH1Y>a)R{wC=T7jnM{`Pr z@HKd^q)0~(12zG8MR%55<@2s=ul%gWpQjpn7Uuw~hM*9^fm>j+fT_EXh<9(8d30+C zi*ojD~i`)O94Nb4(J!vXWxM!{_@lv z7oZf6NlBkk0+1X)^c*n9n3$Nj%cDSktgkmxeU>*OT2Sf&3No-UnDH7Q7DD%?p^}t2 zvENvI2XrO72E2%}e#sfBI1IY*!9COxg_5lv+EoH%FWwCUQW6lHf$4#L1E&yFO)F&} z($(sqDriU>A2$Im_$g36P3uOShZ%ld3-D9)qUeSe(2Ma;WdBu_skq;Y1=ze0=qhZR zji3$(MV|rCZM%fgX_7O_ba4-O?pHZrJAkws2|j)a96=ibZWa}Q09BVDy}w@3YO>Kw z#&_*C;Eln6z^SH&GH}lYK)S0L8%hESbcjmA!Fzq^bt#{WbdWdD*+$;^0+DG>5-4~- zKsP$wasqx)F9!hiqHJuyb?Q~$JY7Qu{Ai6`9|!P0P@90}@1*vJz*%{R*MCbMPIcb4HO-6`L;EPA#gZCQND3*Xjx0sVQnU*rWr-|l8zxiHp|VR^ z%aXB^R16^$IkJ`#=~zO?PT&1=wx(~U_r2chyWaQx=5lpiOmY7I^Z(t?^W4kh)q0E@ zK_y%G7354!-56DVZfaw*zh0GpU%{C<@bYs`>fv*s>vM7sj=z|#rTjNT$mz4MY%`&q zDCP6{aPH{d3a~^{>c4NiwOs-HPIi+>;nOATG9)Ud6{ z<#3t*rY}EOZI|6po9&p$mv>ijg5X5wylu$3?Uvb9{L!`7IR`38b_YYy zBOC&=8{On(1wxQ-Ph^*_!b!lFz*N}oWd*Pr18N_je|Q0TY8$v|)`_VrOqOU+nnnt`w6vN9ndq0*DSS7~@fq$y#= zbfBW9Xxc+LpwVb4UJl|keLcOKn6+`}P}xwb>wk8C7w&1_QLBJC-|l45jeAIxQ0*D- zcjAeZnr@$-lH%WMK7-#Ap$LfVHa6e%c(5TNV``LEz)ckK_dzd5qQF|AV!%$bzw6o+ zhei@|gV_LO&+_O|8Uiy8qeBkxINZ+3X;8J&5m5Q)1BL&|f?@PoxK5~FgyWegpnM~2 zq*+pLzyB->v`iYlJ6KxWDS7j<;Oznq6%7sX0dnTGk`qsIRId8((vLR4pRfbxN(==k zHX`ESM)mWCtv`6?f&H=6eA^e2ar}+PVAr-KV#r8A4Ln*6iwQ6kgqHwHWKq+xcL+J^ z-OL(hX${2#ukzYDI<#X~^7e4(Mt>ea65&XCel^Uauicke3~&a^rEg&o%Pb0btxu+a z@RN?NwD1_zY%fH?B=iP68!5a8zj2(%o``)mLkp}wf@k^X5Ok{|OXbM)@G{)gbO*?x)3)J;E44$SSXtURro6z~MLB-F3SZf*}1ISJl0~3d# zBTu%yp)1p8~NRDhgn&{!-K@swp$)@;EqTUeo6;ZB|H{EEu-=R7Z zzB}RMbbe0~Xa#vYU)9wRQ_e1?H4VLKN5h%A8GPR}YONA2(0V~aNmtZ$3d4C>&K*`^ z?+idZ4vf?$ND?h&A$N%5FYMG%tXNx!W8<^vuv1HMY`RYMX9p_Ugd*k5z+!?ur0GQ2 z9N!(lxMNm@)s-J%u^}cx1%v8~2N28W7tPwm%9jE}Dp9cvPOZ#H_zoh(BjqlwvI@ve`TY+MOBIMkjDbNtgA z?)_b3A%j_HUFy>aPRGUlWF0m(xb9P{b8o3)WIpdibnVZpbH^OwO>>OR1|I#0v4!ZI zn?+7;?8^OgAJGxLzKJvSVTT-R3mc<=c8)kTN;jjQ6HvYDm?<3@8JT7K7Iu&?{2djL9lKbTH|B*&5%@Z{9yZYLJt z`8Da`T%c!ycPoPIM?gbbNp3a16G{+Hx___dhJ|xIt|a~5kflqm2#VVihVsCxbB7&9 zP%=;&B>~oE-%4Bnf&PwBZC358s~U@JTy2mfM{!x;4OC|O!wPwG9q8B4tj#^_I9>3xftM#`cKXv z7#E7cL&^U5s3;Gw4;0Ilp0Bu^C7oq?QW7r8a-iFzW3>xz2fxtvWA4B&OidetWEHHq zW?EioK`;ke;m|618YR_%7Kbq+QyR^U&pyGvqX#6$JyDy9EQU@QT|(@nu=CJu$u0#8 z^<$K!UzH@wvzIIFcx;uJbNKr=4{{RzDQ=2Gu4`HPT7YP8`*-!T20IK4RvihO#CneA zoIBU;R5Fwu6;(i+`e5T6t^xTB`(f}kPFrvf@IagSU?bcx3N7nbvz3A`!ke7;`Olfo zf6JGBf5q8@M+9#@!mGr=%W&>!m=gH1>pD?QMP`FEgJd||O!{Lsr8l$SALL^%FGqhB zRvv9p8AYLTskg2*OHs%IVP7CY*|r1>_!Tf{w)>LC6S~q?IJ_I>7oyO^d7w_hz7k(> ze*!M|SSD*cnBx);UT>=FV9#VXVTrT1Z!ZN^0d|I>SKH-!gB`nlEQb-A%$do_`b;j5 zS3u-BI5f*HXOr=TANJMqii#*{1ndbz2Vetzgklm!nL9SmBb<~7sQ)dQ*-qVycGmj} ze@5;ZZ^}R!1{!}vfx|L`+Mr0js@F8H1E|%g6a9@Yy2}jWe8k8O2wW1%I4NL$F|zCI z-}&(6Z85r@TAp;EFy&a&2KY2KQ&X6pz`{7q{^3zjm3X2E4H8D~3GM*{t$08$DJTS> z72Fege>N*eALr21Oo7qLzxskhZd|Xn2FDZNs|B_Q`+mwEIH6x7?gyjearx60Q&4C0 zH*NX_14&;;T{N-H$?_3F5BEq?C-^B$){G`kQR8dMDHoet9?{J|viBb=~56n+&R#vU+ z9#*}&Bxb>(_gM1ta`Ch#>=RO0MiaNd!5Hp%{~~3M}V+=3n-+v zKJgmR4q9aaqYYs}6U=fGup&e*KfU-wXa~J}c$Dx|N@1hQx-HXO?{NjGIhQo#3}$Yv zIN+@!L2+hO?JBi^3zxikPkaW@FvCpmGvi@9jENXmO2-0VRR9A3FIY)14bHnWXU_PY z$_!R@tL6JZr_(_UG5L{o@Sy;!-1Pw^A(rvB0v^!A62y1*hM8Rkmu8G`xANPS@2 zl7ljLFu1^HgGu)bW^t8y762dDM4P)>${;m;{vP%2l)bE2gjrd%XpIEPgXqcYjI)GY71`Q1Lu$| zlu_z0>C|b>ou8AFLuM*EFvd=3rOI|papteLkSg!)k3-j`*b_~M(0T_U#@GR zs~Yj~(JxcydLCcDlr4=e@J1_&wvHr2=6dYYL3M_|0l8q1#m>csRjAo8R_W2Eyt*=p zIh2AhQ;Nr89&ip<#N-abc6UV#97gZH-vWZyI1~#f51puQ8yS?fYtbTzsOh?7n~{-4 z7qx)SD5f(46Pe!Y$b3&>jA;}L(WymNVoDpmfJbP|I~v41D05eEUfrMc_G@{6p|@+8 zia2H9vSBv1%Y@z`UpUE|xt9n45{WnO{d-Ho+}@w0k5S&-+`L%Tu&_j=ETk+MUS;p$w*n7Yw$U2I`DRG60O43RNj$5~u#5}Sac1A_e301a8Gx2o6 z!(JJx;?ns}-OpwH*B3D~y1;oweDysg%V+xO*a8O;mAJM+f9K9fG_W^sE~01-hX`;0 z={v%=%U)b7V*8zA7!dEC6Ed1>uzz9F=M&+Fg{N}Y9jfnQ8gU{&KFn_&U*$s-4!c?u zhr;IY;F%AdcARIAMtk+Jze^$=v7Wgcg6%(ReEQ6S<-*w-BlQ5y zroD7AjMZYG$HJ6ln1diFR@79acuK8-VnnzrKl=@PP26~jWX-Wxr|})IeIw)BT;K>? z!r+jI1*n>?kS;kW7pPVTwiyi_z!69v1j?m-kA`)Ib=vpUMPX|v-vM%gCfJE-5zcye zogjbJWQX%`I-b8AG#B#+7gh}Rww78$k|A5YAdnrxIqM4Cj+T2XkLtYtWyUuDp=|SO zwDEnE3|=k-(_W4Xf%lJs@1JS`}?Lce=FrQPmCp zX>iQ!G&PmM=$hlwZ;AUMMc3tjxqsb#OrK=bK>PD#v{*sd%R#Bny0Do;nEh$W!-!oA zClsuPq$`19hlE_jrKyO65Y5Tps^f_hmZ-1zYp?@?%x+mps%qG1yZL8BpwkZZ>i`u^ zR8IUYqiP|3Pew!6sa>SDL#9H@9|v93&)V>w({b9ib-u?|yVlhO%VRMMv3esgwjJaU z2m@$vKO6X%cqf*(Rst!>dMoVGQhj@F%38Epa5;fN#7wj0!d_wDAGx>;R}-dCtVghX zT`1zBMYRWkFE#!9&9|PVXugA^2bLu?PnuM?uf@O)Zp8df>N5BPaSCV)_u+K+pp~D% ziA@J6Tlh0-$y%hkX`rNDVj~^Z5mtQ=@x-Go)`nsS34=OAbmdQG_jf}+Jp6b*(+Nbb z@NF}7cNw_F(!KXl3gyhpQXKyf+rYMpU7SD)&`cB0QGWz?VDTlA17akZcCELum}^zK zyiKFB-I2?zI);0WomJ)Z)zvr%5Zgc*>Ro2kii_F@)O%yGOb^3pELo}MI@=RI~4t9zI-GD?2(C?xKfv7Xq40BCV z{YkDe%}`1Ba*Dug*1D)@Eg_ws=2RjKsCPN9gRkN21#Zx4F`ThtXPd2lS>t-$*3Mw&7KN>ikV47fG-c+rhzwT(5ymt|ZNejuobfN5C-^_cnPk&YY!uzAS2E{(KiP%!jsLH>tODgp<{abOKlH_5 z$>qOjE%_(xXPo}m_jP_*SQH1CZM3i;pa`1=3YXqcV}cfa%Nn>o@Dz0T zCIjp_!Q}@T@Q?h}J9=7~yOENqy3i8#SaqGKWAR|%*B}D7fhr@rCxPl3v(HZKpTh3d z_FjZ7gd{A+8Qt}F~P=9G0^8$s3g$BK)Y-k&&fF!_t+k1Cvl-XZ9|c- z!L=XMDVG=a+9!yTtyZk8wvY=cK1@Nns-Xe7E6XouAt35bjBdo-ZrRNo&(N2GzGNn( zB(0as0xIAz&~apTT)p**{ao;zY=Jccrx9pJ^aB_u$Rbe35_mZXzF)Akh3;bDBM=Rd zX*Yti2JY^;VkEnOC@e}-n$qjKY)rsNN;&VSo2)g50|TK(g_Cj-XvSrC?9qtBzZl;E zw+!p_`0rEzp@Ftr2^=(@8ny;HOIv4L1!!whA;j*qo5%f)NvBtk2orR3JH8J|e+89+ zH9%$=yhUVBAy!7ltz73mc8{f;8O__anrjCDr_1Q8v%&NVs}nS0bk50(T!=-ssxJh) z>8`-u0Mo9YV1IT-#*0SjH?mSJ-B|Rd1v~gAjk-B*mP+t*pXkf6e90DE7ExJBAz>!w zT=8T@J{%K)dZ})b)NmKu8nDqYWcZMYfhnz!@{*X-7l^;EWCJS*nrLWp!k9bA$aPJ8 zqOZx<+iB)mhLp#S({r_y|C%%XPauHAbUd7pgK<|tD!`)h7@@pu?KMmlrLRcM^y^l+ z)&XW8MZ7~|ZJ1p_+7Od_!Yz_Qgtl3Xel@7m3lk&USWi@qxNy;~Jy$zr^wB`<-{As8 zY!ZNG_Htn22?eV%^zK$)Li*eBPSsHxbp@CKiG$E$gl$0)NAEQ6_$2;|SPsVoY1vrq z6t82rPT~hktv1C(mZG?I?(ILY3(>}40|Z5c2XeqZ87J-kMXW9V!c2&~SZF|OXb~HK z84OqVJSeD9oE7Ir5^OA+7c~NGjukkR!#lHHc9D1>`Y((EEQ6PQosEz{t_ z^|p<>N6%d068BHq>|5f3(|F$^dvEnZ2!i`1jSgQqkS9hH2kKU!DP>{+kZ*i(Xr>u4 zr(rZ>io4I+Ym&zsX`9^9G!kUTiwBEn7fK*9O<=MugI9wq7(@Jl3V%iJZYu9vPG2iE zs!@WJl{AT3eVls<-b4SqI45NhOhFR#j8+3$_ak3{ihIz634Vqi&$x>D8H*PzG3Q*1 zJk%v{aTa$RXgX%7qM~AqE{!iwHX2VW$TK`C(69GcRVOIa0p%UqDk9h3Zei*7e@B&s z2QsOWYL^rQE15>BW#S&zQZh1WjwP$xix_FtK3lkQ(-p3N904+Lu1St;a7dtSH2yKLfRt{Z1kcQTxV#bx>5Ko-7j?0p5yI|u)E;i}Fvl`Z zLK%>q^29xXgkq}WcgL=4A%lcl|BU=&(1{WC=?5aoZ(V$!=k;8a(46a= zYhE52&)SY(*{ZsE&yr(`qqtxs0NkRWoxX_swtUw4*0r7x#+>;~$_-WTefO{NnC&H8*?GO7pJgX!tB zRH^nd`5zuM_)2{!lb1GgTEo<$c&2DZ$;QXTJRX^F%&|F3Ku)_vl3gUW-HrK{S0XKm z|A8;t?5*~&c;}fZuR1e?`o-BQ2JsrOvH7z%^uI`^`VS~$|9^jE?I%%bVZ-~kt$rI% P7Em_nY)sg&_w4@w7%@{I literal 0 HcmV?d00001 From 66c0062ded30cf135791bc6b9cc91e3a5cc0a695 Mon Sep 17 00:00:00 2001 From: Roopan-Microsoft <168007406+Roopan-Microsoft@users.noreply.github.com> Date: Tue, 1 Apr 2025 20:03:40 +0530 Subject: [PATCH 08/27] Update quota_check.md --- docs/quota_check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/quota_check.md b/docs/quota_check.md index 9c2d6c9a4..20f2c047e 100644 --- a/docs/quota_check.md +++ b/docs/quota_check.md @@ -4,7 +4,7 @@ Before deploying the accelerator, **ensure sufficient quota availability** for t ### πŸ“Œ Default Models & Capacities: ``` -gpt-4o:30, gpt-4o-mini:30, text-embedding-ada-002:80, gpt-4:30, gpt-3.5-turbo:30 +gpt-4o:30, gpt-4o-mini:30, gpt-4:30, text-embedding-ada-002:80, ``` ### πŸ“Œ Default Regions: ``` From 3d9e987cc16304db4b678f761167917d59f983ce Mon Sep 17 00:00:00 2001 From: Roopan-Microsoft <168007406+Roopan-Microsoft@users.noreply.github.com> Date: Tue, 1 Apr 2025 20:03:50 +0530 Subject: [PATCH 09/27] Update quota_check.md --- docs/quota_check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/quota_check.md b/docs/quota_check.md index 20f2c047e..45a90f824 100644 --- a/docs/quota_check.md +++ b/docs/quota_check.md @@ -4,7 +4,7 @@ Before deploying the accelerator, **ensure sufficient quota availability** for t ### πŸ“Œ Default Models & Capacities: ``` -gpt-4o:30, gpt-4o-mini:30, gpt-4:30, text-embedding-ada-002:80, +gpt-4o:30, gpt-4o-mini:30, gpt-4:30, text-embedding-ada-002:80 ``` ### πŸ“Œ Default Regions: ``` From 705b23b3171b2a6177abe15a2de27865f56e8189 Mon Sep 17 00:00:00 2001 From: Roopan-Microsoft <168007406+Roopan-Microsoft@users.noreply.github.com> Date: Tue, 1 Apr 2025 20:41:50 +0530 Subject: [PATCH 10/27] Update quota_check.md --- docs/quota_check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/quota_check.md b/docs/quota_check.md index 45a90f824..7778edbf2 100644 --- a/docs/quota_check.md +++ b/docs/quota_check.md @@ -41,7 +41,7 @@ eastus, uksouth, eastus2, northcentralus, swedencentral, westus, westus2, southc ### **Sample Output** The final table lists regions with available quota. You can select any of these regions for deployment. -![quota-check-ouput](images/quota-check-output.png) +![quota-check-ouput](Images/quota-check-output.png) --- ### **If using Azure Portal and Cloud Shell** From 6fa831590ae6b8daaa26a780abe7b77c46ed3bef Mon Sep 17 00:00:00 2001 From: Roopan-Microsoft <168007406+Roopan-Microsoft@users.noreply.github.com> Date: Tue, 1 Apr 2025 20:43:37 +0530 Subject: [PATCH 11/27] Update quota_check_params.sh --- infra/scripts/quota_check_params.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infra/scripts/quota_check_params.sh b/infra/scripts/quota_check_params.sh index 8cebd9b8e..b5ad477aa 100644 --- a/infra/scripts/quota_check_params.sh +++ b/infra/scripts/quota_check_params.sh @@ -1,7 +1,7 @@ #!/bin/bash # Default Models and Capacities (Comma-separated in "model:capacity" format) -DEFAULT_MODEL_CAPACITY="gpt-4o:30,gpt-4o-mini:30,text-embedding-ada-002:80,gpt-4:30,gpt-3.5-turbo:30" +DEFAULT_MODEL_CAPACITY="gpt-4o:30,gpt-4o-mini:30,gpt-4:30,text-embedding-ada-002:80" # Convert the comma-separated string into an array IFS=',' read -r -a MODEL_CAPACITY_PAIRS <<< "$DEFAULT_MODEL_CAPACITY" From ed4df08a587439782004680d0860a9ac27a6ee0c Mon Sep 17 00:00:00 2001 From: "Priyanka Singhal (Persistent Systems Inc)" Date: Wed, 2 Apr 2025 11:18:28 +0530 Subject: [PATCH 12/27] error handling im provement in the script --- infra/scripts/quota_check_params.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/infra/scripts/quota_check_params.sh b/infra/scripts/quota_check_params.sh index b5ad477aa..2673e689e 100644 --- a/infra/scripts/quota_check_params.sh +++ b/infra/scripts/quota_check_params.sh @@ -10,9 +10,16 @@ echo "πŸ”„ Fetching available Azure subscriptions..." SUBSCRIPTIONS=$(az account list --query "[?state=='Enabled'].{Name:name, ID:id}" --output tsv) SUB_COUNT=$(echo "$SUBSCRIPTIONS" | wc -l) -if [ "$SUB_COUNT" -eq 1 ]; then +if [ "$SUB_COUNT" -eq 0 ]; then + echo "❌ ERROR: No active Azure subscriptions found. Please log in using 'az login' and ensure you have an active subscription." + exit 1 +elif [ "$SUB_COUNT" -eq 1 ]; then # If only one subscription, automatically select it AZURE_SUBSCRIPTION_ID=$(echo "$SUBSCRIPTIONS" | awk '{print $2}') + if [ -z "$AZURE_SUBSCRIPTION_ID" ]; then + echo "❌ ERROR: No active Azure subscriptions found. Please log in using 'az login' and ensure you have an active subscription." + exit 1 + fi echo "βœ… Using the only available subscription: $AZURE_SUBSCRIPTION_ID" else # If multiple subscriptions exist, prompt the user to choose one @@ -34,6 +41,7 @@ else done fi + # Set the selected subscription az account set --subscription "$AZURE_SUBSCRIPTION_ID" echo "🎯 Active Subscription: $(az account show --query '[name, id]' --output tsv)" From 764dca51d5dc52363cc632ec1f6fa45b399a4f1e Mon Sep 17 00:00:00 2001 From: "Priyanka Singhal (Persistent Systems Inc)" Date: Thu, 3 Apr 2025 15:00:37 +0530 Subject: [PATCH 13/27] add permission for quota_check_params.sh in dev container --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 8cbf2c514..9e9fa4417 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -16,7 +16,7 @@ ] } }, - "postStartCommand": "git pull origin main && python3 -m pip install -r infra/scripts/index_scripts/requirements.txt && curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash", + "postStartCommand": "git pull origin main && python3 -m pip install -r infra/scripts/index_scripts/requirements.txt && curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash && chmod +x ./infra/scripts/quota_check_params.sh", "remoteUser": "vscode", "hostRequirements": { "memory": "4gb" From 4b15079eebfc2f86a19e6d0a687e999d7b99709b Mon Sep 17 00:00:00 2001 From: Ajit Padhi Date: Fri, 4 Apr 2025 14:56:11 +0530 Subject: [PATCH 14/27] create release pipeline added --- .github/workflows/create-release.yml | 62 ++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 .github/workflows/create-release.yml diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml new file mode 100644 index 000000000..6b0cb82ca --- /dev/null +++ b/.github/workflows/create-release.yml @@ -0,0 +1,62 @@ +name: "Create Release" + +on: + push: + branches: ["main"] + + workflow_dispatch: + +jobs: + create-release: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + ref: ${{ github.sha }} + + - uses: codfish/semantic-release-action@v3 + id: semantic + with: + tag-format: 'v${version}' + additional-packages: | + ['conventional-changelog-conventionalcommits@7'] + plugins: | + [ + [ + "@semantic-release/commit-analyzer", + { + "preset": "conventionalcommits" + } + ], + [ + "@semantic-release/release-notes-generator", + { + "preset": "conventionalcommits", + "presetConfig": { + "types": [ + { type: 'feat', section: 'Features', hidden: false }, + { type: 'fix', section: 'Bug Fixes', hidden: false }, + { type: 'perf', section: 'Performance Improvements', hidden: false }, + { type: 'revert', section: 'Reverts', hidden: false }, + { type: 'docs', section: 'Other Updates', hidden: false }, + { type: 'style', section: 'Other Updates', hidden: false }, + { type: 'chore', section: 'Other Updates', hidden: false }, + { type: 'refactor', section: 'Other Updates', hidden: false }, + { type: 'test', section: 'Other Updates', hidden: false }, + { type: 'build', section: 'Other Updates', hidden: false }, + { type: 'ci', section: 'Other Updates', hidden: false } + ] + } + } + ], + '@semantic-release/github' + ] + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - run: echo ${{ steps.semantic.outputs.release-version }} + + - run: echo "$OUTPUTS" + env: + OUTPUTS: ${{ toJson(steps.semantic.outputs) }} \ No newline at end of file From fcb7a1e23568c5a88536a5afae12280eaa3ffa7a Mon Sep 17 00:00:00 2001 From: Ajit Padhi Date: Fri, 4 Apr 2025 16:53:53 +0530 Subject: [PATCH 15/27] fix in create release --- .github/workflows/create-release.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 6b0cb82ca..1ca61df0a 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -6,6 +6,10 @@ on: workflow_dispatch: +permissions: + contents: write + pull-requests: write + jobs: create-release: runs-on: ubuntu-latest From 720f552f0648859bd1782d5ae4dd83a07d771af6 Mon Sep 17 00:00:00 2001 From: Harsh-Microsoft Date: Fri, 4 Apr 2025 18:12:04 +0530 Subject: [PATCH 16/27] docs: add PowerShell setup guide for Windows users --- README.md | 1 + docs/PowershellSetup.md | 54 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 docs/PowershellSetup.md diff --git a/README.md b/README.md index 3517a31cc..4419efa11 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,7 @@ If you're not using one of the above options for opening the project, then you'l * [Python 3.9+](https://www.python.org/downloads/) * [Docker Desktop](https://www.docker.com/products/docker-desktop/) * [Git](https://git-scm.com/downloads) + * [Powershell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.5) (Required only for Windows users. Follow the steps [here](./docs/PowershellSetup.md) to add it to the Windows PATH.) 2. Download the project code: diff --git a/docs/PowershellSetup.md b/docs/PowershellSetup.md new file mode 100644 index 000000000..3cdc7912e --- /dev/null +++ b/docs/PowershellSetup.md @@ -0,0 +1,54 @@ +# Add PowerShell 7 to PATH in Windows + +This guide will help you add **PowerShell 7** (PowerShell Core) to your system’s PATH variable on Windows, so you can easily run it from any Command Prompt or Run dialog. + +## Prerequisites + +- You should have **PowerShell 7** installed on your machine. If you haven’t installed it yet, you can download it following the guide here: [Installing PowerShell on Windows | Microsoft Learn](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.5). +- **Administrative privileges are not required** unless you're modifying system-wide environment variables. You can modify your **user-specific PATH** without admin rights. + +## Steps to Add PowerShell 7 to PATH + +### 1. Open **System Properties** + - Press `Win + X` and choose **System**. + - Click on **Advanced system settings** on the left sidebar. This will open the **System Properties** window. + - In the **System Properties** window, click on the **Environment Variables** button at the bottom. + +### 2. Edit User Environment Variables + - In the **Environment Variables** window, under **User variables**, find the `Path` variable. + - Select the `Path` variable and click **Edit**. (If the `Path` variable doesn’t exist, click **New** and name it `Path`.) + +### 3. Check if PowerShell 7 Path is Already in PATH + - Before adding the path, make sure the following path is not already present in the list: + ``` + C:\Program Files\PowerShell\7\ + ``` + - If the path is already there, you don't need to add it again. + +### 4. Add PowerShell 7 Path + - If the path is not already in the list, click **New** in the **Edit Environment Variable** window. + - Add the following path to the list: + + ``` + C:\Program Files\PowerShell\7\ + ``` + + > **Note:** If you installed PowerShell 7 in a custom location, replace the above path with the correct one. + +### 5. Save Changes + - After adding the path, click **OK** to close the **Edit Environment Variable** window. + - Click **OK** again to close the **Environment Variables** window. + - Finally, click **OK** to exit the **System Properties** window. + +### 6. Verify PowerShell 7 in PATH + - Open **Command Prompt** or **Run** (press `Win + R`). + - Type `pwsh` and press Enter. + - If PowerShell 7 opens, you've successfully added it to your PATH! + +--- + +## Troubleshooting + +- **PowerShell 7 not opening:** Ensure the path to PowerShell 7 is entered correctly. If you're using a custom installation folder, check that the correct path is added to the `Path` variable. + +- **Changes not taking effect:** Try restarting your computer or logging out and logging back in for the changes to apply. From da0ceaa03524ef158ebaf14c943b59ad07a58528 Mon Sep 17 00:00:00 2001 From: Avijit-Microsoft Date: Fri, 4 Apr 2025 19:00:53 +0530 Subject: [PATCH 17/27] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4419efa11..2fc46d262 100644 --- a/README.md +++ b/README.md @@ -135,7 +135,7 @@ If you're not using one of the above options for opening the project, then you'l * [Python 3.9+](https://www.python.org/downloads/) * [Docker Desktop](https://www.docker.com/products/docker-desktop/) * [Git](https://git-scm.com/downloads) - * [Powershell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.5) (Required only for Windows users. Follow the steps [here](./docs/PowershellSetup.md) to add it to the Windows PATH.) + * [Powershell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.5)
Required for Windows users only. Follow the steps [here](./docs/PowershellSetup.md) to add it to the Windows PATH. 2. Download the project code: From 68230d0db55beab7db52aa5640b58023f730f467 Mon Sep 17 00:00:00 2001 From: Pavan-Microsoft Date: Tue, 8 Apr 2025 10:07:55 +0530 Subject: [PATCH 18/27] Update azure.yaml to remove deployment section --- azure.yaml | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/azure.yaml b/azure.yaml index ec811bb85..7ae23bbf5 100644 --- a/azure.yaml +++ b/azure.yaml @@ -8,25 +8,6 @@ name: conversation-knowledge-mining metadata: template: conversation-knowledge-mining@1.0 -parameters: - solutionPrefix: - type: string - default: bs-azdtest - otherLocation: - type: string - default: eastus2 - baseUrl: - type: string - default: 'https://raw.githubusercontent.com/microsoft/Conversation-Knowledge-Mining-Solution-Accelerator/' - -deployment: - mode: Incremental - template: ./infra/main.bicep # Path to the main.bicep file inside the 'deployment' folder - parameters: - solutionPrefix: ${parameters.solutionPrefix} - otherLocation: ${parameters.otherLocation} - baseUrl: ${parameters.baseUrl} - hooks: postprovision: windows: From 3233da87ab348aaa9803c1361f57e775d0c3f3e1 Mon Sep 17 00:00:00 2001 From: "Priyanka Singhal (Persistent Systems Inc)" Date: Tue, 8 Apr 2025 14:30:02 +0530 Subject: [PATCH 19/27] Replace standard with globalstandard and updated quota check document --- docs/quota_check.md | 12 +++-- infra/scripts/checkquota_km.sh | 4 +- infra/scripts/quota_check_params.sh | 75 ++++++++--------------------- 3 files changed, 30 insertions(+), 61 deletions(-) diff --git a/docs/quota_check.md b/docs/quota_check.md index 7778edbf2..e47e63ef9 100644 --- a/docs/quota_check.md +++ b/docs/quota_check.md @@ -63,12 +63,16 @@ The final table lists regions with available quota. You can select any of these 1. Open the terminal in VS Code or Codespaces. 2. If you're using VS Code, click the dropdown on the right side of the terminal window, and select `Git Bash`. ![git_bash](images/git_bash.png) -3. Navigate to the `scripts` folder where the script files are located and make the script as executable: +3. Log in to your Azure account (if not already logged in): + ```sh + az login + ``` +4. Navigate to the `scripts` folder where the script files are located and make the script as executable: ```sh cd infra/scripts chmod +x quota_check_params.sh ``` -4. Run the appropriate script based on your requirement: +5. Run the appropriate script based on your requirement: **To check quota for the deployment** @@ -77,10 +81,10 @@ The final table lists regions with available quota. You can select any of these ``` - Refer to [Input Formats](#input-formats) for detailed commands. -5. If you see the error `_bash: az: command not found_`, install Azure CLI: +6. If you see the error `_bash: az: command not found_`, install Azure CLI: ```sh curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash az login ``` -6. Rerun the script after installing Azure CLI. +7. Rerun the script after installing Azure CLI. diff --git a/infra/scripts/checkquota_km.sh b/infra/scripts/checkquota_km.sh index b622bd262..438f4b230 100644 --- a/infra/scripts/checkquota_km.sh +++ b/infra/scripts/checkquota_km.sh @@ -32,8 +32,8 @@ echo "βœ… Azure subscription set successfully." # Define models and their minimum required capacities declare -A MIN_CAPACITY=( - ["OpenAI.Standard.gpt-4o-mini"]=$GPT_MIN_CAPACITY #km generic - ["OpenAI.Standard.text-embedding-ada-002"]=$TEXT_EMBEDDING_MIN_CAPACITY #km generic + ["OpenAI.GlobalStandard.gpt-4o-mini"]=$GPT_MIN_CAPACITY #km generic + ["OpenAI.GlobalStandard.text-embedding-ada-002"]=$TEXT_EMBEDDING_MIN_CAPACITY #km generic ) VALID_REGION="" diff --git a/infra/scripts/quota_check_params.sh b/infra/scripts/quota_check_params.sh index 2673e689e..4fafae470 100644 --- a/infra/scripts/quota_check_params.sh +++ b/infra/scripts/quota_check_params.sh @@ -99,25 +99,21 @@ echo "βœ… Retrieved Azure regions. Checking availability..." INDEX=1 VALID_REGIONS=() -for REGION in "${REGIONS[@]}"; do - echo "----------------------------------------" - echo "πŸ” Checking region: $REGION" +TABLE_ROWS=() +for REGION in "${REGIONS[@]}"; do QUOTA_INFO=$(az cognitiveservices usage list --location "$REGION" --output json | tr '[:upper:]' '[:lower:]') if [ -z "$QUOTA_INFO" ]; then - echo "⚠️ WARNING: Failed to retrieve quota for region $REGION. Skipping." continue fi + TEMP_TABLE_ROWS=() TEXT_EMBEDDING_AVAILABLE=false AT_LEAST_ONE_MODEL_AVAILABLE=false - TEMP_TABLE_ROWS=() for index in "${!FINAL_MODEL_NAMES[@]}"; do MODEL_NAME="${FINAL_MODEL_NAMES[$index]}" REQUIRED_CAPACITY="${FINAL_CAPACITIES[$index]}" - FOUND=false - INSUFFICIENT_QUOTA=false if [ "$MODEL_NAME" = "text-embedding-ada-002" ]; then MODEL_TYPES=("openai.standard.$MODEL_NAME") @@ -126,65 +122,34 @@ for REGION in "${REGIONS[@]}"; do fi for MODEL_TYPE in "${MODEL_TYPES[@]}"; do - FOUND=false - INSUFFICIENT_QUOTA=false - echo "πŸ” Checking model: $MODEL_NAME with required capacity: $REQUIRED_CAPACITY ($MODEL_TYPE)" - - MODEL_INFO=$(echo "$QUOTA_INFO" | awk -v model="\"value\": \"$MODEL_TYPE\"" ' - BEGIN { RS="},"; FS="," } - $0 ~ model { print $0 } - ') - - if [ -z "$MODEL_INFO" ]; then - FOUND=false - echo "⚠️ WARNING: No quota information found for model: $MODEL_NAME in region: $REGION for model type: $MODEL_TYPE." - continue - fi + MODEL_INFO=$(echo "$QUOTA_INFO" | awk -v model="\"value\": \"$MODEL_TYPE\"" 'BEGIN { RS="},"; FS="," } $0 ~ model { print $0 }') + if [ -z "$MODEL_INFO" ]; then continue; fi - if [ -n "$MODEL_INFO" ]; then - FOUND=true - CURRENT_VALUE=$(echo "$MODEL_INFO" | awk -F': ' '/"currentvalue"/ {print $2}' | tr -d ',' | tr -d ' ') - LIMIT=$(echo "$MODEL_INFO" | awk -F': ' '/"limit"/ {print $2}' | tr -d ',' | tr -d ' ') - - CURRENT_VALUE=${CURRENT_VALUE:-0} - LIMIT=${LIMIT:-0} - - CURRENT_VALUE=$(echo "$CURRENT_VALUE" | cut -d'.' -f1) - LIMIT=$(echo "$LIMIT" | cut -d'.' -f1) - - AVAILABLE=$((LIMIT - CURRENT_VALUE)) - echo "βœ… Model: $MODEL_TYPE | Used: $CURRENT_VALUE | Limit: $LIMIT | Available: $AVAILABLE" - - if [ "$AVAILABLE" -ge "$REQUIRED_CAPACITY" ]; then - FOUND=true - if [ "$MODEL_NAME" = "text-embedding-ada-002" ]; then - TEXT_EMBEDDING_AVAILABLE=true - fi - AT_LEAST_ONE_MODEL_AVAILABLE=true - TEMP_TABLE_ROWS+=("$(printf "| %-4s | %-20s | %-43s | %-10s | %-10s | %-10s |" "$INDEX" "$REGION" "$MODEL_TYPE" "$LIMIT" "$CURRENT_VALUE" "$AVAILABLE")") - else - INSUFFICIENT_QUOTA=true + CURRENT_VALUE=$(echo "$MODEL_INFO" | awk -F': ' '/"currentvalue"/ {print $2}' | tr -d ', ' | cut -d'.' -f1) + LIMIT=$(echo "$MODEL_INFO" | awk -F': ' '/"limit"/ {print $2}' | tr -d ', ' | cut -d'.' -f1) + + CURRENT_VALUE=${CURRENT_VALUE:-0} + LIMIT=${LIMIT:-0} + AVAILABLE=$((LIMIT - CURRENT_VALUE)) + + if [ "$AVAILABLE" -ge "$REQUIRED_CAPACITY" ]; then + if [ "$MODEL_NAME" = "text-embedding-ada-002" ]; then + TEXT_EMBEDDING_AVAILABLE=true fi - fi - - if [ "$FOUND" = false ]; then - echo "❌ No models found for model: $MODEL_NAME in region: $REGION (${MODEL_TYPES[*]})" - elif [ "$INSUFFICIENT_QUOTA" = true ]; then - echo "⚠️ Model $MODEL_NAME in region: $REGION has insufficient quota (${MODEL_TYPES[*]})." + AT_LEAST_ONE_MODEL_AVAILABLE=true + TEMP_TABLE_ROWS+=("$(printf "| %-4s | %-20s | %-43s | %-10s | %-10s | %-10s |" "$INDEX" "$REGION" "$MODEL_TYPE" "$LIMIT" "$CURRENT_VALUE" "$AVAILABLE")") fi done done -if { [ "$IS_USER_PROVIDED_PAIRS" = true ] && [ "$INSUFFICIENT_QUOTA" = false ] && [ "$FOUND" = true ]; } || { [ "$TEXT_EMBEDDING_AVAILABLE" = true ] && { [ "$APPLY_OR_CONDITION" != true ] || [ "$AT_LEAST_ONE_MODEL_AVAILABLE" = true ]; }; }; then + if { [ "$IS_USER_PROVIDED_PAIRS" = true ] && [ "$INSUFFICIENT_QUOTA" = false ]; } || + { [ "$TEXT_EMBEDDING_AVAILABLE" = true ] && { [ "$APPLY_OR_CONDITION" != true ] || [ "$AT_LEAST_ONE_MODEL_AVAILABLE" = true ]; }; }; then VALID_REGIONS+=("$REGION") TABLE_ROWS+=("${TEMP_TABLE_ROWS[@]}") - INDEX=$((INDEX + 1)) - elif [ ${#USER_PROVIDED_PAIRS[@]} -eq 0 ]; then - echo "🚫 Skipping $REGION as it does not meet quota requirements." fi - done + if [ ${#TABLE_ROWS[@]} -eq 0 ]; then echo "--------------------------------------------------------------------------------------------------------------------" From da3c84f39aecb8d78d7682d6c93c025ca1e0a6f4 Mon Sep 17 00:00:00 2001 From: "Priyanka Singhal (Persistent Systems Inc)" Date: Tue, 8 Apr 2025 14:56:31 +0530 Subject: [PATCH 20/27] commented out echo statement --- infra/scripts/quota_check_params.sh | 79 +++++++++++++++++++++-------- 1 file changed, 58 insertions(+), 21 deletions(-) diff --git a/infra/scripts/quota_check_params.sh b/infra/scripts/quota_check_params.sh index 4fafae470..0a0960a53 100644 --- a/infra/scripts/quota_check_params.sh +++ b/infra/scripts/quota_check_params.sh @@ -99,21 +99,25 @@ echo "βœ… Retrieved Azure regions. Checking availability..." INDEX=1 VALID_REGIONS=() -TABLE_ROWS=() - for REGION in "${REGIONS[@]}"; do + echo "----------------------------------------" + echo "πŸ” Checking region: $REGION" + QUOTA_INFO=$(az cognitiveservices usage list --location "$REGION" --output json | tr '[:upper:]' '[:lower:]') if [ -z "$QUOTA_INFO" ]; then + echo "⚠️ WARNING: Failed to retrieve quota for region $REGION. Skipping." continue fi - TEMP_TABLE_ROWS=() TEXT_EMBEDDING_AVAILABLE=false AT_LEAST_ONE_MODEL_AVAILABLE=false + TEMP_TABLE_ROWS=() for index in "${!FINAL_MODEL_NAMES[@]}"; do MODEL_NAME="${FINAL_MODEL_NAMES[$index]}" REQUIRED_CAPACITY="${FINAL_CAPACITIES[$index]}" + FOUND=false + INSUFFICIENT_QUOTA=false if [ "$MODEL_NAME" = "text-embedding-ada-002" ]; then MODEL_TYPES=("openai.standard.$MODEL_NAME") @@ -122,33 +126,66 @@ for REGION in "${REGIONS[@]}"; do fi for MODEL_TYPE in "${MODEL_TYPES[@]}"; do - MODEL_INFO=$(echo "$QUOTA_INFO" | awk -v model="\"value\": \"$MODEL_TYPE\"" 'BEGIN { RS="},"; FS="," } $0 ~ model { print $0 }') - if [ -z "$MODEL_INFO" ]; then continue; fi - - CURRENT_VALUE=$(echo "$MODEL_INFO" | awk -F': ' '/"currentvalue"/ {print $2}' | tr -d ', ' | cut -d'.' -f1) - LIMIT=$(echo "$MODEL_INFO" | awk -F': ' '/"limit"/ {print $2}' | tr -d ', ' | cut -d'.' -f1) - - CURRENT_VALUE=${CURRENT_VALUE:-0} - LIMIT=${LIMIT:-0} - AVAILABLE=$((LIMIT - CURRENT_VALUE)) + FOUND=false + INSUFFICIENT_QUOTA=false + # echo "πŸ” Checking model: $MODEL_NAME with required capacity: $REQUIRED_CAPACITY ($MODEL_TYPE)" + + MODEL_INFO=$(echo "$QUOTA_INFO" | awk -v model="\"value\": \"$MODEL_TYPE\"" ' + BEGIN { RS="},"; FS="," } + $0 ~ model { print $0 } + ') + + if [ -z "$MODEL_INFO" ]; then + FOUND=false + # echo "⚠️ WARNING: No quota information found for model: $MODEL_NAME in region: $REGION for model type: $MODEL_TYPE." + continue + fi - if [ "$AVAILABLE" -ge "$REQUIRED_CAPACITY" ]; then - if [ "$MODEL_NAME" = "text-embedding-ada-002" ]; then - TEXT_EMBEDDING_AVAILABLE=true + if [ -n "$MODEL_INFO" ]; then + FOUND=true + CURRENT_VALUE=$(echo "$MODEL_INFO" | awk -F': ' '/"currentvalue"/ {print $2}' | tr -d ',' | tr -d ' ') + LIMIT=$(echo "$MODEL_INFO" | awk -F': ' '/"limit"/ {print $2}' | tr -d ',' | tr -d ' ') + + CURRENT_VALUE=${CURRENT_VALUE:-0} + LIMIT=${LIMIT:-0} + + CURRENT_VALUE=$(echo "$CURRENT_VALUE" | cut -d'.' -f1) + LIMIT=$(echo "$LIMIT" | cut -d'.' -f1) + + AVAILABLE=$((LIMIT - CURRENT_VALUE)) + # echo "βœ… Model: $MODEL_TYPE | Used: $CURRENT_VALUE | Limit: $LIMIT | Available: $AVAILABLE" + + if [ "$AVAILABLE" -ge "$REQUIRED_CAPACITY" ]; then + FOUND=true + if [ "$MODEL_NAME" = "text-embedding-ada-002" ]; then + TEXT_EMBEDDING_AVAILABLE=true + fi + AT_LEAST_ONE_MODEL_AVAILABLE=true + TEMP_TABLE_ROWS+=("$(printf "| %-4s | %-20s | %-43s | %-10s | %-10s | %-10s |" "$INDEX" "$REGION" "$MODEL_TYPE" "$LIMIT" "$CURRENT_VALUE" "$AVAILABLE")") + else + INSUFFICIENT_QUOTA=true fi - AT_LEAST_ONE_MODEL_AVAILABLE=true - TEMP_TABLE_ROWS+=("$(printf "| %-4s | %-20s | %-43s | %-10s | %-10s | %-10s |" "$INDEX" "$REGION" "$MODEL_TYPE" "$LIMIT" "$CURRENT_VALUE" "$AVAILABLE")") + fi + + if [ "$FOUND" = false ]; then + # echo "❌ No models found for model: $MODEL_NAME in region: $REGION (${MODEL_TYPES[*]})" + : + elif [ "$INSUFFICIENT_QUOTA" = true ]; then + : + # echo "⚠️ Model $MODEL_NAME in region: $REGION has insufficient quota (${MODEL_TYPES[*]})." fi done done - if { [ "$IS_USER_PROVIDED_PAIRS" = true ] && [ "$INSUFFICIENT_QUOTA" = false ]; } || - { [ "$TEXT_EMBEDDING_AVAILABLE" = true ] && { [ "$APPLY_OR_CONDITION" != true ] || [ "$AT_LEAST_ONE_MODEL_AVAILABLE" = true ]; }; }; then +if { [ "$IS_USER_PROVIDED_PAIRS" = true ] && [ "$INSUFFICIENT_QUOTA" = false ] && [ "$FOUND" = true ]; } || { [ "$TEXT_EMBEDDING_AVAILABLE" = true ] && { [ "$APPLY_OR_CONDITION" != true ] || [ "$AT_LEAST_ONE_MODEL_AVAILABLE" = true ]; }; }; then VALID_REGIONS+=("$REGION") TABLE_ROWS+=("${TEMP_TABLE_ROWS[@]}") + INDEX=$((INDEX + 1)) + elif [ ${#USER_PROVIDED_PAIRS[@]} -eq 0 ]; then + echo "🚫 Skipping $REGION as it does not meet quota requirements." fi -done +done if [ ${#TABLE_ROWS[@]} -eq 0 ]; then echo "--------------------------------------------------------------------------------------------------------------------" @@ -165,4 +202,4 @@ else echo "➑️ To request a quota increase, visit: https://aka.ms/oai/stuquotarequest" fi -echo "βœ… Script completed." +echo "βœ… Script completed." \ No newline at end of file From b34445bdf26d58683f6d98a2754c213c44b21dbd Mon Sep 17 00:00:00 2001 From: "Priyanka Singhal (Persistent Systems Inc)" Date: Tue, 8 Apr 2025 18:10:35 +0530 Subject: [PATCH 21/27] added --verbose feature in script --- infra/scripts/quota_check_params.sh | 69 ++++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 12 deletions(-) diff --git a/infra/scripts/quota_check_params.sh b/infra/scripts/quota_check_params.sh index 0a0960a53..6929bd736 100644 --- a/infra/scripts/quota_check_params.sh +++ b/infra/scripts/quota_check_params.sh @@ -1,4 +1,50 @@ #!/bin/bash +# VERBOSE=false + +MODELS="" +REGIONS="" +VERBOSE=false + +while [[ $# -gt 0 ]]; do + case "$1" in + --models) + MODELS="$2" + shift 2 + ;; + --regions) + REGIONS="$2" + shift 2 + ;; + --verbose) + VERBOSE=true + shift + ;; + *) + echo "Unknown option: $1" + exit 1 + ;; + esac +done + +# Fallback to defaults if not provided +[[ -z "$MODELS" ]] +[[ -z "$REGIONS" ]] + +echo "Models: $MODELS" +echo "Regions: $REGIONS" +echo "Verbose: $VERBOSE" + +for arg in "$@"; do + if [ "$arg" = "--verbose" ]; then + VERBOSE=true + fi +done + +log_verbose() { + if [ "$VERBOSE" = true ]; then + echo "$1" + fi +} # Default Models and Capacities (Comma-separated in "model:capacity" format) DEFAULT_MODEL_CAPACITY="gpt-4o:30,gpt-4o-mini:30,gpt-4:30,text-embedding-ada-002:80" @@ -51,8 +97,8 @@ DEFAULT_REGIONS="eastus,uksouth,eastus2,northcentralus,swedencentral,westus,west IFS=',' read -r -a DEFAULT_REGION_ARRAY <<< "$DEFAULT_REGIONS" # Read parameters (if any) -IFS=',' read -r -a USER_PROVIDED_PAIRS <<< "$1" -USER_REGION="$2" +IFS=',' read -r -a USER_PROVIDED_PAIRS <<< "$MODELS" +USER_REGION="$REGIONS" IS_USER_PROVIDED_PAIRS=false @@ -100,12 +146,12 @@ INDEX=1 VALID_REGIONS=() for REGION in "${REGIONS[@]}"; do - echo "----------------------------------------" - echo "πŸ” Checking region: $REGION" + log_verbose "----------------------------------------" + log_verbose "πŸ” Checking region: $REGION" QUOTA_INFO=$(az cognitiveservices usage list --location "$REGION" --output json | tr '[:upper:]' '[:lower:]') if [ -z "$QUOTA_INFO" ]; then - echo "⚠️ WARNING: Failed to retrieve quota for region $REGION. Skipping." + log_verbose "⚠️ WARNING: Failed to retrieve quota for region $REGION. Skipping." continue fi @@ -128,7 +174,7 @@ for REGION in "${REGIONS[@]}"; do for MODEL_TYPE in "${MODEL_TYPES[@]}"; do FOUND=false INSUFFICIENT_QUOTA=false - # echo "πŸ” Checking model: $MODEL_NAME with required capacity: $REQUIRED_CAPACITY ($MODEL_TYPE)" + log_verbose "πŸ” Checking model: $MODEL_NAME with required capacity: $REQUIRED_CAPACITY ($MODEL_TYPE)" MODEL_INFO=$(echo "$QUOTA_INFO" | awk -v model="\"value\": \"$MODEL_TYPE\"" ' BEGIN { RS="},"; FS="," } @@ -137,7 +183,7 @@ for REGION in "${REGIONS[@]}"; do if [ -z "$MODEL_INFO" ]; then FOUND=false - # echo "⚠️ WARNING: No quota information found for model: $MODEL_NAME in region: $REGION for model type: $MODEL_TYPE." + log_verbose "⚠️ WARNING: No quota information found for model: $MODEL_NAME in region: $REGION for model type: $MODEL_TYPE." continue fi @@ -153,7 +199,7 @@ for REGION in "${REGIONS[@]}"; do LIMIT=$(echo "$LIMIT" | cut -d'.' -f1) AVAILABLE=$((LIMIT - CURRENT_VALUE)) - # echo "βœ… Model: $MODEL_TYPE | Used: $CURRENT_VALUE | Limit: $LIMIT | Available: $AVAILABLE" + log_verbose "βœ… Model: $MODEL_TYPE | Used: $CURRENT_VALUE | Limit: $LIMIT | Available: $AVAILABLE" if [ "$AVAILABLE" -ge "$REQUIRED_CAPACITY" ]; then FOUND=true @@ -168,11 +214,10 @@ for REGION in "${REGIONS[@]}"; do fi if [ "$FOUND" = false ]; then - # echo "❌ No models found for model: $MODEL_NAME in region: $REGION (${MODEL_TYPES[*]})" - : + log_verbose "❌ No models found for model: $MODEL_NAME in region: $REGION (${MODEL_TYPES[*]})" + elif [ "$INSUFFICIENT_QUOTA" = true ]; then - : - # echo "⚠️ Model $MODEL_NAME in region: $REGION has insufficient quota (${MODEL_TYPES[*]})." + log_verbose "⚠️ Model $MODEL_NAME in region: $REGION has insufficient quota (${MODEL_TYPES[*]})." fi done done From 58e6d0e6a2cc14494ecacc86e8f3f5296c926a0c Mon Sep 17 00:00:00 2001 From: Pavan-Microsoft Date: Wed, 9 Apr 2025 10:10:27 +0530 Subject: [PATCH 22/27] default host plan change --- docs/quota_check.md | 5 ++++ infra/deploy_app_service.bicep | 2 +- infra/main.json | 50 +++++++++++++++++----------------- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/docs/quota_check.md b/docs/quota_check.md index 7778edbf2..bcc792c5e 100644 --- a/docs/quota_check.md +++ b/docs/quota_check.md @@ -2,6 +2,11 @@ Before deploying the accelerator, **ensure sufficient quota availability** for the required model. +### Login if you have not done so already +``` +azd auth login +``` + ### πŸ“Œ Default Models & Capacities: ``` gpt-4o:30, gpt-4o-mini:30, gpt-4:30, text-embedding-ada-002:80 diff --git a/infra/deploy_app_service.bicep b/infra/deploy_app_service.bicep index 51e99f064..d10dec0c8 100644 --- a/infra/deploy_app_service.bicep +++ b/infra/deploy_app_service.bicep @@ -20,7 +20,7 @@ param HostingPlanName string = '${ solutionName }-app-service-plan' ) // param HostingPlanSku string = 'B1' -param HostingPlanSku string = 'P0v3' +param HostingPlanSku string = 'B2' @description('Name of Web App') param WebsiteName string = '${ solutionName }-app-service' diff --git a/infra/main.json b/infra/main.json index e96190ffa..2c58c2111 100644 --- a/infra/main.json +++ b/infra/main.json @@ -4,8 +4,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.93.31351", - "templateHash": "13599865329986757489" + "version": "0.34.44.8038", + "templateHash": "9207690475359141802" } }, "parameters": { @@ -128,8 +128,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.93.31351", - "templateHash": "8800226751863900201" + "version": "0.34.44.8038", + "templateHash": "2718062317870371098" } }, "parameters": { @@ -259,8 +259,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.93.31351", - "templateHash": "4317523167912536944" + "version": "0.34.44.8038", + "templateHash": "11024517080548002305" } }, "parameters": { @@ -402,8 +402,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.93.31351", - "templateHash": "319562905704482740" + "version": "0.34.44.8038", + "templateHash": "7463011266889657341" } }, "parameters": { @@ -1093,8 +1093,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.93.31351", - "templateHash": "14620142974675285735" + "version": "0.34.44.8038", + "templateHash": "17679659647877785824" } }, "parameters": { @@ -1277,8 +1277,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.93.31351", - "templateHash": "12347068855899407617" + "version": "0.34.44.8038", + "templateHash": "573049773979289587" } }, "parameters": { @@ -1489,8 +1489,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.93.31351", - "templateHash": "16605082293199555822" + "version": "0.34.44.8038", + "templateHash": "12523803244328608887" } }, "parameters": { @@ -1712,8 +1712,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.93.31351", - "templateHash": "7497154856203442649" + "version": "0.34.44.8038", + "templateHash": "12449758432080186673" } }, "parameters": { @@ -1924,8 +1924,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.93.31351", - "templateHash": "6738503368906728468" + "version": "0.34.44.8038", + "templateHash": "17199249570586107558" } }, "parameters": { @@ -2156,8 +2156,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.93.31351", - "templateHash": "13542795043218377011" + "version": "0.34.44.8038", + "templateHash": "8392442477995673035" } }, "parameters": { @@ -2398,8 +2398,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.93.31351", - "templateHash": "18414416216987649125" + "version": "0.34.44.8038", + "templateHash": "10339009027263620768" } }, "parameters": { @@ -2513,8 +2513,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.93.31351", - "templateHash": "5835426116727035307" + "version": "0.34.44.8038", + "templateHash": "2689043508944421407" } }, "parameters": { @@ -2535,7 +2535,7 @@ }, "HostingPlanSku": { "type": "string", - "defaultValue": "P0v3", + "defaultValue": "B2", "allowedValues": [ "F1", "D1", From 0deccc59dee84bafc490d84c69d78fa156ef1aaf Mon Sep 17 00:00:00 2001 From: Pavan-Microsoft Date: Wed, 9 Apr 2025 12:12:09 +0530 Subject: [PATCH 23/27] install setuptools wheel in docker file --- src/App/WebApp.Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/App/WebApp.Dockerfile b/src/App/WebApp.Dockerfile index 9f376051d..d92dbc901 100644 --- a/src/App/WebApp.Dockerfile +++ b/src/App/WebApp.Dockerfile @@ -27,7 +27,9 @@ RUN apk add --no-cache --virtual .build-deps \ libpq COPY requirements.txt /usr/src/app/ -RUN pip install --no-cache-dir -r /usr/src/app/requirements.txt \ + +RUN pip install --upgrade pip setuptools wheel \ + && pip install --no-cache-dir -r /usr/src/app/requirements.txt \ && rm -rf /root/.cache # Copy backend source code From 5807700b9afe542457c738ccd35f7e0fe99887b7 Mon Sep 17 00:00:00 2001 From: "Priyanka Singhal (Persistent Systems Inc)" Date: Mon, 14 Apr 2025 17:26:32 +0530 Subject: [PATCH 24/27] updated Readme --- docs/quota_check.md | 46 ++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/docs/quota_check.md b/docs/quota_check.md index e47e63ef9..c85dbae17 100644 --- a/docs/quota_check.md +++ b/docs/quota_check.md @@ -1,6 +1,15 @@ ## Check Quota Availability Before Deployment Before deploying the accelerator, **ensure sufficient quota availability** for the required model. +> **For Global Standard | GPT-4o - the capacity to at least 150k tokens post-deployment for optimal performance.** + +> **For Standard | GPT-4 - ensure a minimum of 30k–40k tokens for best results.** + +### Login if you have not done so already +``` +azd auth login +``` + ### πŸ“Œ Default Models & Capacities: ``` @@ -15,33 +24,40 @@ eastus, uksouth, eastus2, northcentralus, swedencentral, westus, westus2, southc - Only model(s) provided β†’ The script will check for those models in the default regions. - Only region(s) provided β†’ The script will check default models in the specified regions. - Both models and regions provided β†’ The script will check those models in the specified regions. +- `--verbose` passed β†’ Enables detailed logging output for debugging and traceability. ### **Input Formats** -βœ”οΈ Run without parameters to check default models & regions: +> Use the --models, --regions, and --verbose options for parameter handling: + +βœ”οΈ Run without parameters to check default models & regions without verbose logging: ``` ./quota_check_params.sh ``` -βœ”οΈ Model name and required capacity in the format: +βœ”οΈ Enable verbose logging: + ``` + ./quota_check_params.sh --verbose + ``` +βœ”οΈ Check specific model(s) in default regions: ``` - ./quota_check_params.sh gpt-4o:30 + ./quota_check_params.sh --models gpt-4o:30,text-embedding-ada-002:80 ``` -βœ”οΈ Multiple models can be passed, separated by commas: +βœ”οΈ Check default models in specific region(s): ``` - ./quota_check_params.sh gpt-4o:30,text-embedding-ada-002:80 +./quota_check_params.sh --regions eastus,westus ``` βœ”οΈ Passing Both models and regions: ``` - ./quota_check_params.sh gpt-4o:30 eastus,westus2 + ./quota_check_params.sh --models gpt-4o:30 --regions eastus,westus2 ``` -βœ”οΈ Check default models in specific regions: +βœ”οΈ All parameters combined: ``` - ./quota_check_params.sh "" eastus,westus2 + ./quota_check_params.sh --models gpt-4:30,text-embedding-ada-002:80 --regions eastus,westus --verbose ``` ### **Sample Output** The final table lists regions with available quota. You can select any of these regions for deployment. -![quota-check-ouput](Images/quota-check-output.png) +![quota-check-ouput](images/quota-check-output.png) --- ### **If using Azure Portal and Cloud Shell** @@ -63,16 +79,12 @@ The final table lists regions with available quota. You can select any of these 1. Open the terminal in VS Code or Codespaces. 2. If you're using VS Code, click the dropdown on the right side of the terminal window, and select `Git Bash`. ![git_bash](images/git_bash.png) -3. Log in to your Azure account (if not already logged in): - ```sh - az login - ``` -4. Navigate to the `scripts` folder where the script files are located and make the script as executable: +3. Navigate to the `scripts` folder where the script files are located and make the script as executable: ```sh cd infra/scripts chmod +x quota_check_params.sh ``` -5. Run the appropriate script based on your requirement: +4. Run the appropriate script based on your requirement: **To check quota for the deployment** @@ -81,10 +93,10 @@ The final table lists regions with available quota. You can select any of these ``` - Refer to [Input Formats](#input-formats) for detailed commands. -6. If you see the error `_bash: az: command not found_`, install Azure CLI: +5. If you see the error `_bash: az: command not found_`, install Azure CLI: ```sh curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash az login ``` -7. Rerun the script after installing Azure CLI. +6. Rerun the script after installing Azure CLI. \ No newline at end of file From d74e841f58cf71f306659e86a44cb0b6e2d2bc58 Mon Sep 17 00:00:00 2001 From: "Priyanka Singhal (Persistent Systems Inc)" Date: Mon, 14 Apr 2025 20:03:27 +0530 Subject: [PATCH 25/27] updated readme --- docs/quota_check.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/quota_check.md b/docs/quota_check.md index c85dbae17..327f8bf21 100644 --- a/docs/quota_check.md +++ b/docs/quota_check.md @@ -57,7 +57,7 @@ eastus, uksouth, eastus2, northcentralus, swedencentral, westus, westus2, southc ### **Sample Output** The final table lists regions with available quota. You can select any of these regions for deployment. -![quota-check-ouput](images/quota-check-output.png) +![quota-check-ouput](Images/quota-check-output.png) --- ### **If using Azure Portal and Cloud Shell** @@ -78,7 +78,7 @@ The final table lists regions with available quota. You can select any of these ### **If using VS Code or Codespaces** 1. Open the terminal in VS Code or Codespaces. 2. If you're using VS Code, click the dropdown on the right side of the terminal window, and select `Git Bash`. - ![git_bash](images/git_bash.png) + ![git_bash](Images/git_bash.png) 3. Navigate to the `scripts` folder where the script files are located and make the script as executable: ```sh cd infra/scripts From bf4b77852d47bfb17a0029921b997f923bdb6b39 Mon Sep 17 00:00:00 2001 From: Roopan-Microsoft <168007406+Roopan-Microsoft@users.noreply.github.com> Date: Mon, 14 Apr 2025 23:22:42 +0530 Subject: [PATCH 26/27] Update quota_check.md --- docs/quota_check.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/quota_check.md b/docs/quota_check.md index 327f8bf21..4e51e1c47 100644 --- a/docs/quota_check.md +++ b/docs/quota_check.md @@ -1,9 +1,7 @@ ## Check Quota Availability Before Deployment Before deploying the accelerator, **ensure sufficient quota availability** for the required model. -> **For Global Standard | GPT-4o - the capacity to at least 150k tokens post-deployment for optimal performance.** - -> **For Standard | GPT-4 - ensure a minimum of 30k–40k tokens for best results.** +> **We recommend increasing the capacity to 100k tokens for optimal performance.** ### Login if you have not done so already ``` @@ -99,4 +97,4 @@ The final table lists regions with available quota. You can select any of these curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash az login ``` -6. Rerun the script after installing Azure CLI. \ No newline at end of file +6. Rerun the script after installing Azure CLI. From c389b391a52aacc45b58014132ca9d42821164e9 Mon Sep 17 00:00:00 2001 From: Harmanpreet-Microsoft Date: Tue, 15 Apr 2025 19:02:10 +0530 Subject: [PATCH 27/27] Update dependabot.yml --- .github/dependabot.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7c77274f6..fd8bf8696 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,7 +11,7 @@ updates: open-pull-requests-limit: 100 - package-ecosystem: "pip" - directory: "/App" + directory: "/src/App" schedule: interval: "monthly" commit-message: @@ -20,7 +20,7 @@ updates: open-pull-requests-limit: 100 - package-ecosystem: "npm" - directory: "/App/frontend" + directory: "/src/App/frontend" schedule: interval: "monthly" commit-message: