diff --git a/README.md b/README.md index 179ef8d2d..794067e5d 100644 --- a/README.md +++ b/README.md @@ -194,10 +194,10 @@ Select either "PostgreSQL" or "Cosmos DB": When Deployment is complete, follow steps in [Set Up Authentication in Azure App Service](./docs/azure_app_service_auth_setup.md) to add app authentication to your web app running on Azure App Service -**Note**: The default configuration deploys an OpenAI Model "gpt-4o" with version 2024-05-13. However, not all +**Note**: The default configuration deploys an OpenAI Model "gpt-4.1" with version 2025-04-14. However, not all locations support this version. If you're deploying to a location that doesn't support version 2024-05-13, you'll need to switch to a lower version. To find out which versions are supported in different regions, visit the -[GPT-4o Model Availability](https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models?tabs=global-standard%2Cstandard-chat-completions#global-standard-model-availability) page. +[GPT-4.1 Model Availability](https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models?tabs=global-standard%2Cstandard-chat-completions#global-standard-model-availability) page. ### Testing the deployment 1. Navigate to the admin site, where you can upload documents. It will be located at: diff --git a/code/backend/batch/utilities/helpers/env_helper.py b/code/backend/batch/utilities/helpers/env_helper.py index 31bd07354..58ad0b484 100644 --- a/code/backend/batch/utilities/helpers/env_helper.py +++ b/code/backend/batch/utilities/helpers/env_helper.py @@ -174,10 +174,10 @@ def __load_config(self, **kwargs) -> None: else: # Otherwise, fallback to individual environment variables self.AZURE_OPENAI_MODEL = os.getenv( - "AZURE_OPENAI_MODEL", "gpt-4o" + "AZURE_OPENAI_MODEL", "gpt-4.1" ) self.AZURE_OPENAI_MODEL_NAME = os.getenv( - "AZURE_OPENAI_MODEL_NAME", "gpt-4o" + "AZURE_OPENAI_MODEL_NAME", "gpt-4.1" ) self.AZURE_OPENAI_VISION_MODEL = os.getenv("AZURE_OPENAI_VISION_MODEL", "gpt-4") diff --git a/code/tests/functional/tests/backend_api/default/test_conversation.py b/code/tests/functional/tests/backend_api/default/test_conversation.py index f70237963..673567fa1 100644 --- a/code/tests/functional/tests/backend_api/default/test_conversation.py +++ b/code/tests/functional/tests/backend_api/default/test_conversation.py @@ -65,7 +65,7 @@ def completions_mocking(httpserver: HTTPServer, app_config: AppConfig): "id": "chatcmpl-6v7mkQj980V1yBec6ETrKPRqFjNw9", "object": "chat.completion", "created": 1679072642, - "model": "gpt-4o", + "model": "gpt-4.1", "usage": { "prompt_tokens": 40, "completion_tokens": 50, diff --git a/code/tests/functional/tests/backend_api/default/test_post_prompt_tool.py b/code/tests/functional/tests/backend_api/default/test_post_prompt_tool.py index 6a8e6615e..a5dcf2a68 100644 --- a/code/tests/functional/tests/backend_api/default/test_post_prompt_tool.py +++ b/code/tests/functional/tests/backend_api/default/test_post_prompt_tool.py @@ -100,7 +100,7 @@ def completions_mocking(httpserver: HTTPServer, app_config: AppConfig): "id": "chatcmpl-6v7mkQj980V1yBec6ETrKPRqFjNw9", "object": "chat.completion", "created": 1679072642, - "model": "gpt-4o", + "model": "gpt-4.1", "usage": { "prompt_tokens": 40, "completion_tokens": 50, @@ -132,7 +132,7 @@ def test_post_responds_successfully_when_not_filtered( "id": "chatcmpl-6v7mkQj980V1yBec6ETrKPRqFjNw9", "object": "chat.completion", "created": 1679072642, - "model": "gpt-4o", + "model": "gpt-4.1", "usage": { "prompt_tokens": 40, "completion_tokens": 50, @@ -193,7 +193,7 @@ def test_post_responds_successfully_when_filtered( "id": "chatcmpl-6v7mkQj980V1yBec6ETrKPRqFjNw9", "object": "chat.completion", "created": 1679072642, - "model": "gpt-4o", + "model": "gpt-4.1", "usage": { "prompt_tokens": 40, "completion_tokens": 50, @@ -254,7 +254,7 @@ def test_post_makes_correct_call_to_openai_from_post_prompt_tool( "id": "chatcmpl-6v7mkQj980V1yBec6ETrKPRqFjNw9", "object": "chat.completion", "created": 1679072642, - "model": "gpt-4o", + "model": "gpt-4.1", "usage": { "prompt_tokens": 40, "completion_tokens": 50, diff --git a/code/tests/functional/tests/backend_api/integrated_vectorization_custom_conversation/test_iv_question_answer_tool.py b/code/tests/functional/tests/backend_api/integrated_vectorization_custom_conversation/test_iv_question_answer_tool.py index 8097b24cf..2d70d4b82 100644 --- a/code/tests/functional/tests/backend_api/integrated_vectorization_custom_conversation/test_iv_question_answer_tool.py +++ b/code/tests/functional/tests/backend_api/integrated_vectorization_custom_conversation/test_iv_question_answer_tool.py @@ -63,7 +63,7 @@ def completions_mocking(httpserver: HTTPServer, app_config: AppConfig): "id": "chatcmpl-6v7mkQj980V1yBec6ETrKPRqFjNw9", "object": "chat.completion", "created": 1679072642, - "model": "gpt-4o", + "model": "gpt-4.1", "usage": { "prompt_tokens": 40, "completion_tokens": 50, diff --git a/docs/LOCAL_DEPLOYMENT.md b/docs/LOCAL_DEPLOYMENT.md index cce626450..9edf3e1d8 100644 --- a/docs/LOCAL_DEPLOYMENT.md +++ b/docs/LOCAL_DEPLOYMENT.md @@ -12,6 +12,8 @@ The easiest way to run this accelerator is in a VS Code Dev Containers, which wi 1. In the VS Code window that opens, once the project files show up (this may take several minutes), open a terminal window 1. Run `azd auth login` 1. Run `azd env set AZURE_APP_SERVICE_HOSTING_MODEL code` - This sets your environment to deploy code rather than rely on public containers, like the "Deploy to Azure" button. +1. To use an existing Log Analytics workspace, follow the [setup steps here](../docs/re-use-log-analytics.md) before running `azd up`. +1. To use an existing Resource Group, follow the [setup steps here](../docs/re-use-resource-group.md) before running `azd up`. 1. Run `azd up` - This will provision Azure resources and deploy the accelerator to those resources. * **Important**: Beware that the resources created by this command will incur immediate costs, primarily from the AI Search resource. These resources may accrue costs even if you interrupt the command before it is fully executed. You can run `azd down` or delete the resources manually to avoid unnecessary spending. @@ -191,7 +193,7 @@ Execute the above [shell command](#L81) to run the function locally. You may nee |AZURE_SEARCH_USE_INTEGRATED_VECTORIZATION ||Whether to use [Integrated Vectorization](https://learn.microsoft.com/en-us/azure/search/vector-search-integrated-vectorization)| |AZURE_OPENAI_RESOURCE||the name of your Azure OpenAI resource| |AZURE_OPENAI_MODEL||The name of your model deployment| -|AZURE_OPENAI_MODEL_NAME|gpt-4o|The name of the model| +|AZURE_OPENAI_MODEL_NAME|gpt-4.1|The name of the model| |AZURE_OPENAI_MODEL_VERSION|2024-05-13|The version of the model to use| |AZURE_OPENAI_API_KEY||One of the API keys of your Azure OpenAI resource| |AZURE_OPENAI_EMBEDDING_MODEL|text-embedding-ada-002|The name of your Azure OpenAI embeddings model deployment| diff --git a/docs/TEAMS_LOCAL_DEPLOYMENT.md b/docs/TEAMS_LOCAL_DEPLOYMENT.md index 981befad8..732191a36 100644 --- a/docs/TEAMS_LOCAL_DEPLOYMENT.md +++ b/docs/TEAMS_LOCAL_DEPLOYMENT.md @@ -65,7 +65,7 @@ Or use the [Azure Functions VS Code extension](https://marketplace.visualstudio. |AZURE_SEARCH_FILTER||Filter to apply to search queries.| |AZURE_OPENAI_RESOURCE||the name of your Azure OpenAI resource| |AZURE_OPENAI_MODEL||The name of your model deployment| -|AZURE_OPENAI_MODEL_NAME|gpt-4o|The name of the model| +|AZURE_OPENAI_MODEL_NAME|gpt-4.1|The name of the model| |AZURE_OPENAI_API_KEY||One of the API keys of your Azure OpenAI resource| |AZURE_OPENAI_EMBEDDING_MODEL|text-embedding-ada-002|The name of you Azure OpenAI embeddings model deployment| |AZURE_OPENAI_TEMPERATURE|0|What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. A value of 0 is recommended when using your data.| diff --git a/docs/contract_assistance.md b/docs/contract_assistance.md index ce980a164..02b371258 100644 --- a/docs/contract_assistance.md +++ b/docs/contract_assistance.md @@ -10,9 +10,9 @@ The following is the Chat With Your Data infrastructure configuration that we su - **Azure Semantic Search**: Utilize Azure Semantic Search to efficiently index and search legal documents. This provides powerful search capabilities and integration with other Azure services. - **Azure Cognitive Search Top K 15**: Set the Top K parameter to 15 to retrieve the top 15 most relevant documents. This configuration helps in providing precise and relevant search results for user queries. - **Azure Search Integrated Vectorization**: Enable integrated vectorization in Azure Search to improve the semantic understanding and relevance of search results. This enhances the Contract Assistant's ability to provide contextually accurate answers. -- **Azure OpenAI Model gpt-4o**: Leverage the Azure OpenAI model gpt-4o for advanced natural language processing capabilities. This model is well-suited for handling complex legal queries and providing detailed and contextually appropriate responses. +- **Azure OpenAI Model gpt-4.1**: Leverage the Azure OpenAI model gpt-4.1 for advanced natural language processing capabilities. This model is well-suited for handling complex legal queries and providing detailed and contextually appropriate responses. - **Orchestration Strategy: Semantic Kernel**: Implement the Semantic Kernel orchestration strategy to effectively manage the integration and interaction between different components of the infrastructure. This strategy ensures seamless operation and optimal performance of the Contract Assistant. -- **Conversation Flow Options**: Setting `CONVERSATION_FLOW` enables running advanced AI models like GPT-4o on your own enterprise data without needing to train or fine-tune models. +- **Conversation Flow Options**: Setting `CONVERSATION_FLOW` enables running advanced AI models like GPT-4.1 on your own enterprise data without needing to train or fine-tune models. By following these infrastructure configurations, you can enhance the efficiency, accuracy, and overall performance of the Chat With Your Data Contract Review and Summarization Assistant, ensuring it meets the high demands and expectations of professionals. @@ -22,8 +22,8 @@ To apply the suggested configurations in your deployment, update the following f - **Azure Semantic Search**: Set `AZURE_SEARCH_USE_SEMANTIC_SEARCH` to `true` - **Azure Cognitive Search Top K 15**: Set `AZURE_SEARCH_TOP_K` to `15`. - **Azure Search Integrated Vectorization**: Set `AZURE_SEARCH_USE_INTEGRATED_VECTORIZATION` to `true`. -- **Azure OpenAI Model**: Set `AZURE_OPENAI_MODEL` to `gpt-4o`. -- **Azure OpenAI Model Name**: Set `AZURE_OPENAI_MODEL_NAME` to `gpt-4o`. (could be different based on the name of the Azure OpenAI model deployment) +- **Azure OpenAI Model**: Set `AZURE_OPENAI_MODEL` to `gpt-4.1`. +- **Azure OpenAI Model Name**: Set `AZURE_OPENAI_MODEL_NAME` to `gpt-4.1`. (could be different based on the name of the Azure OpenAI model deployment) - **Azure OpenAI Model Name Version**: Set `AZURE_OPENAI_MODEL_VERSION` to `2024-05-13`. - **Conversation Flow Options**: Set `CONVERSATION_FLOW` to `byod` - **Orchestration Strategy**: Set `ORCHESTRATION_STRATEGY` to `Semantic Kernel`. diff --git a/docs/employee_assistance.md b/docs/employee_assistance.md index 53fedc857..775168883 100644 --- a/docs/employee_assistance.md +++ b/docs/employee_assistance.md @@ -10,9 +10,9 @@ The following is the Chat With Your Data infrastructure configuration that we su - **Azure Semantic Search**: Utilize Azure Semantic Search to efficiently index and search employee handbooks and corporate policy documents. This provides powerful search capabilities and integration with other Azure services. - **Azure Cognitive Search Top K 15**: Set the Top K parameter to 15 to retrieve the top 15 most relevant documents. This configuration helps in providing precise and relevant search results for user queries. - **Azure Search Integrated Vectorization**: Enable integrated vectorization in Azure Search to improve the semantic understanding and relevance of search results. This enhances the Contract Assistant's ability to provide contextually accurate answers. -- **Azure OpenAI Model gpt-4o**: Leverage the Azure OpenAI model gpt-4o for advanced natural language processing capabilities. This model is well-suited for handling complex legal queries and providing detailed and contextually appropriate responses. +- **Azure OpenAI Model gpt-4.1**: Leverage the Azure OpenAI model gpt-4.1 for advanced natural language processing capabilities. This model is well-suited for handling complex legal queries and providing detailed and contextually appropriate responses. - **Orchestration Strategy: Semantic Kernel**: Implement the Semantic Kernel orchestration strategy to effectively manage the integration and interaction between different components of the infrastructure. This strategy ensures seamless operation and optimal performance of the Employee Assistant. -- **Conversation Flow Options**: Setting `CONVERSATION_FLOW` enables running advanced AI models like GPT-4o on your own enterprise data without needing to train or fine-tune models. +- **Conversation Flow Options**: Setting `CONVERSATION_FLOW` enables running advanced AI models like GPT-4.1 on your own enterprise data without needing to train or fine-tune models. By following these infrastructure configurations, you can enhance the efficiency, accuracy, and overall performance of the Chat With Your Data Employee Assistant, ensuring it meets the high demands and expectations of professionals. @@ -22,7 +22,7 @@ To apply the suggested configurations in your deployment, update the following f - **Azure Semantic Search**: Set `AZURE_SEARCH_USE_SEMANTIC_SEARCH` to `true` - **Azure Cognitive Search Top K 15**: Set `AZURE_SEARCH_TOP_K` to `15`. - **Azure Search Integrated Vectorization**: Set `AZURE_SEARCH_USE_INTEGRATED_VECTORIZATION` to `true`. -- **Azure OpenAI Model Info**: Set `AZURE_OPENAI_MODEL_INFO` to `{"model":"gpt-4o","modelName":"gpt-4o","modelVersion":"2024-05-13"}`.(model could be different based on the name of the Azure OpenAI model deployment). +- **Azure OpenAI Model Info**: Set `AZURE_OPENAI_MODEL_INFO` to `{"model":"gpt-4.1","modelName":"gpt-4.1","modelVersion":"2025-04-14"}`.(model could be different based on the name of the Azure OpenAI model deployment). - **Conversation Flow Options**: Set `CONVERSATION_FLOW` to `byod` - **Orchestration Strategy**: Set `ORCHESTRATION_STRATEGY` to `Semantic Kernel`. diff --git a/docs/images/logAnalytics.png b/docs/images/logAnalytics.png new file mode 100644 index 000000000..95402f8d1 Binary files /dev/null and b/docs/images/logAnalytics.png differ diff --git a/docs/images/logAnalyticsJson.png b/docs/images/logAnalyticsJson.png new file mode 100644 index 000000000..3a4093bf4 Binary files /dev/null and b/docs/images/logAnalyticsJson.png differ diff --git a/docs/images/logAnalyticsList.png b/docs/images/logAnalyticsList.png new file mode 100644 index 000000000..6dcf4640b Binary files /dev/null and b/docs/images/logAnalyticsList.png differ diff --git a/docs/model_configuration.md b/docs/model_configuration.md index aa988c649..78262db95 100644 --- a/docs/model_configuration.md +++ b/docs/model_configuration.md @@ -15,11 +15,11 @@ This document outlines the necessary steps and configurations required for setti ### LLM - `AZURE_OPENAI_MODEL`: The Azure OpenAI Model Deployment Name - - example: `my-gpt-4o` + - example: `my-gpt-4.1` - `AZURE_OPENAI_MODEL_NAME`: The Azure OpenAI Model Name - - example: `gpt-4o` + - example: `gpt-4.1` - `AZURE_OPENAI_MODEL_VERSION`: The Azure OpenAI Model Version - - example: `2024-05-13` + - example: `2025-04-14` - `AZURE_OPENAI_MODEL_CAPACITY`: The Tokens per Minute Rate Limit (thousands) - example: `30` @@ -62,12 +62,12 @@ This document outlines the necessary steps and configurations required for setti - To get the value of an environment variable, you can use the following command: - `azd env get ` -## GPT-4o & Text-Embeddings-3-Large -- The following environment variables are set for the GPT-4o and Text-Embeddings-3-Large models: +## GPT-4.1 & Text-Embeddings-3-Large +- The following environment variables are set for the GPT-4.1 and Text-Embeddings-3-Large models: - `AZURE_OPENAI_API_VERSION`: `2024-05-01-preview` - - `AZURE_OPENAI_MODEL`: `my-gpt-4o` - - `AZURE_OPENAI_MODEL_NAME`: `gpt-4o` - - `AZURE_OPENAI_MODEL_VERSION`: `2024-05-13` + - `AZURE_OPENAI_MODEL`: `my-gpt-4.1` + - `AZURE_OPENAI_MODEL_NAME`: `gpt-4.1` + - `AZURE_OPENAI_MODEL_VERSION`: `2025-04-14` - `AZURE_OPENAI_EMBEDDING_MODEL`: `my-text-embedding-3-large` - `AZURE_OPENAI_EMBEDDING_MODEL_NAME`: `text-embedding-3-large` - `AZURE_OPENAI_EMBEDDING_MODEL_VERSION`: `1` diff --git a/docs/re-use-log-analytics.md b/docs/re-use-log-analytics.md new file mode 100644 index 000000000..11e2e7a8b --- /dev/null +++ b/docs/re-use-log-analytics.md @@ -0,0 +1,31 @@ +[← Back to *LOCAL_DEPLOYMENT* guide](../docs/LOCAL_DEPLOYMENT.md) + +# Reusing an Existing Log Analytics Workspace +To configure your environment to use an existing Log Analytics Workspace, follow these steps: +--- +### 1. Go to Azure Portal +Go to https://portal.azure.com + +### 2. Search for Log Analytics +In the search bar at the top, type "Log Analytics workspaces" and click on it and click on the workspace you want to use. + +![alt text](../docs/images/logAnalyticsList.png) + +### 3. Copy Workspace id +In the Overview pane, Click on JSON View + +![alt text](../docs/images/logAnalytics.png) + +Copy Resource ID that is your Workspace ID + +![alt text](../docs/images/logAnalyticsJson.png) + +### 4. Set the Workspace ID in Your Environment +Run the following command in your terminal +```bash +azd env set AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID '' +``` +Replace `` with the value obtained from Step 3. + +### 5. Continue Deployment +Proceed with the next steps in the [Chat with your data local deployment guide](../docs/LOCAL_DEPLOYMENT.md). diff --git a/docs/re-use-resource-group.md b/docs/re-use-resource-group.md new file mode 100644 index 000000000..b782af556 --- /dev/null +++ b/docs/re-use-resource-group.md @@ -0,0 +1,35 @@ +[← Back to *LOCAL_DEPLOYMENT* guide](../docs/LOCAL_DEPLOYMENT.md) + +# Reusing an Existing Resource Group + +To use an existing Azure Resource Group for your deployment, follow these steps: + +--- + +### 1. Identify the Resource Group + +- Visit the [Azure Portal](https://portal.azure.com) and choose the Resource Group you want to reuse. + +### 2. Set the Resource Group in your Environment + +Before running `azd up`, set the resource group name: + +```bash +azd env set AZURE_RESOURCE_GROUP +``` +Replace `` with the name of your chosen Resource Group. + +### 3. Set the Resource Group location where the specified resource group exists + +If you want to specify the location, run: + +```bash +azd env set AZURE_RESOURCE_GROUP_LOCATION +``` +Replace `` with the desired Azure region. + +--- + +### 4. Continue Deployment + +Proceed with the next steps in the [Chat with your data local deployment guide](../docs/LOCAL_DEPLOYMENT.md). diff --git a/docs/transparency_faq.md b/docs/transparency_faq.md index 5212d3d9f..e5d23558c 100644 --- a/docs/transparency_faq.md +++ b/docs/transparency_faq.md @@ -2,7 +2,7 @@ ### What is Chat with your data Solution Accelerator? -This solution accelerator is an open-source GitHub Repository for the "Chat with your data" solution that combines the capabilities of Azure AI Search and GPT 3.5, 4, and 4o to create a conversational search experience. This solution accelerator uses Azure OpenAI GPT and embedding models, and an Azure AI Search index generated data by the customer, once installed/deployed, which is integrated into a web application to provide a natural language interface for search queries. The repository showcases a sample scenario of a contract analyst who wants to review and summarize relevant contracts, and another use case for a wealth advisor who is interested in reviewing market and fund documents. +This solution accelerator is an open-source GitHub Repository for the "Chat with your data" solution that combines the capabilities of Azure AI Search and GPT 3.5, 4 and 4.1 to create a conversational search experience. This solution accelerator uses Azure OpenAI GPT and embedding models, and an Azure AI Search index generated data by the customer, once installed/deployed, which is integrated into a web application to provide a natural language interface for search queries. The repository showcases a sample scenario of a contract analyst who wants to review and summarize relevant contracts, and another use case for a wealth advisor who is interested in reviewing market and fund documents. ### What can Chat with your data Solution Accelerator do? diff --git a/infra/main.bicep b/infra/main.bicep index b0606ef8c..17e77d51a 100644 --- a/infra/main.bicep +++ b/infra/main.bicep @@ -126,13 +126,13 @@ param azureOpenAIResourceName string = 'oai-${resourceToken}' param azureOpenAISkuName string = 'S0' @description('Azure OpenAI Model Deployment Name') -param azureOpenAIModel string = 'gpt-4o' +param azureOpenAIModel string = 'gpt-4.1' @description('Azure OpenAI Model Name') -param azureOpenAIModelName string = 'gpt-4o' +param azureOpenAIModelName string = 'gpt-4.1' @description('Azure OpenAI Model Version') -param azureOpenAIModelVersion string = '2024-05-13' +param azureOpenAIModelVersion string = '2025-04-14' @description('Azure OpenAI Model Capacity - See here for more info https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/quota') param azureOpenAIModelCapacity int = 30 @@ -404,7 +404,7 @@ var defaultOpenAiDeployments = [ version: azureOpenAIModelVersion } sku: { - name: 'Standard' + name: 'GlobalStandard' capacity: azureOpenAIModelCapacity } } diff --git a/infra/main.bicepparam b/infra/main.bicepparam index 392fa45fc..d68d4bf48 100644 --- a/infra/main.bicepparam +++ b/infra/main.bicepparam @@ -32,9 +32,9 @@ param azureSearchOffsetColumn = readEnvironmentVariable('AZURE_SEARCH_OFFSET_COL // OpenAI parameters param azureOpenAIApiVersion = readEnvironmentVariable('AZURE_OPENAI_API_VERSION', '2024-02-01') -param azureOpenAIModel = readEnvironmentVariable('AZURE_OPENAI_MODEL', 'gpt-4o') -param azureOpenAIModelName = readEnvironmentVariable('AZURE_OPENAI_MODEL_NAME', 'gpt-4o') -param azureOpenAIModelVersion = readEnvironmentVariable('AZURE_OPENAI_MODEL_VERSION', '2024-05-13') +param azureOpenAIModel = readEnvironmentVariable('AZURE_OPENAI_MODEL', 'gpt-4.1') +param azureOpenAIModelName = readEnvironmentVariable('AZURE_OPENAI_MODEL_NAME', 'gpt-4.1') +param azureOpenAIModelVersion = readEnvironmentVariable('AZURE_OPENAI_MODEL_VERSION', '2025-04-14') param azureOpenAIModelCapacity = int(readEnvironmentVariable('AZURE_OPENAI_MODEL_CAPACITY', '30')) param useAdvancedImageProcessing = bool(readEnvironmentVariable('USE_ADVANCED_IMAGE_PROCESSING', 'false')) param advancedImageProcessingMaxImages = int(readEnvironmentVariable('ADVANCED_IMAGE_PROCESSING_MAX_IMAGES', '1')) diff --git a/infra/main.json b/infra/main.json index fb3e66093..186c6a438 100644 --- a/infra/main.json +++ b/infra/main.json @@ -4,8 +4,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "6933035325950046645" + "version": "0.36.1.42791", + "templateHash": "5658288950532904687" } }, "parameters": { @@ -259,21 +259,21 @@ }, "azureOpenAIModel": { "type": "string", - "defaultValue": "gpt-4o", + "defaultValue": "gpt-4.1", "metadata": { "description": "Azure OpenAI Model Deployment Name" } }, "azureOpenAIModelName": { "type": "string", - "defaultValue": "gpt-4o", + "defaultValue": "gpt-4.1", "metadata": { "description": "Azure OpenAI Model Name" } }, "azureOpenAIModelVersion": { "type": "string", - "defaultValue": "2024-05-13", + "defaultValue": "2025-04-14", "metadata": { "description": "Azure OpenAI Model Version" } @@ -886,7 +886,7 @@ "version": "[parameters('azureOpenAIModelVersion')]" }, "sku": { - "name": "Standard", + "name": "GlobalStandard", "capacity": "[parameters('azureOpenAIModelCapacity')]" } }, @@ -943,8 +943,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "7044806472594940520" + "version": "0.36.1.42791", + "templateHash": "13552365542706136811" } }, "parameters": { @@ -1035,8 +1035,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "5034169730722456139" + "version": "0.36.1.42791", + "templateHash": "16238674825125616801" } }, "parameters": { @@ -1207,8 +1207,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "13540067517470579995" + "version": "0.36.1.42791", + "templateHash": "18258663885754684875" } }, "parameters": { @@ -1437,8 +1437,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "13792105490315249619" + "version": "0.36.1.42791", + "templateHash": "13654700215438528863" }, "description": "Creates an Azure Key Vault." }, @@ -1539,8 +1539,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "9442619140000284253" + "version": "0.36.1.42791", + "templateHash": "5396502874055092713" }, "description": "Creates an Azure Cognitive Services instance." }, @@ -1698,8 +1698,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "9442619140000284253" + "version": "0.36.1.42791", + "templateHash": "5396502874055092713" }, "description": "Creates an Azure Cognitive Services instance." }, @@ -1851,8 +1851,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -1922,8 +1922,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -1993,8 +1993,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -2064,8 +2064,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -2139,8 +2139,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "9442619140000284253" + "version": "0.36.1.42791", + "templateHash": "5396502874055092713" }, "description": "Creates an Azure Cognitive Services instance." }, @@ -2310,8 +2310,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "9937345711952694500" + "version": "0.36.1.42791", + "templateHash": "16435352906283381381" } }, "parameters": { @@ -2577,8 +2577,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "17979429106268080377" + "version": "0.36.1.42791", + "templateHash": "7022850395133125583" }, "description": "Creates an Azure AI Search instance." }, @@ -2746,8 +2746,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "8394937952157172457" + "version": "0.36.1.42791", + "templateHash": "8289034454652170240" }, "description": "Creates an Azure App Service plan." }, @@ -2886,8 +2886,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "13560289473578764686" + "version": "0.36.1.42791", + "templateHash": "16642907920540663373" } }, "parameters": { @@ -3075,8 +3075,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "2841679603910691651" + "version": "0.36.1.42791", + "templateHash": "7056589812564712804" }, "description": "Creates an Azure App Service in an existing Azure App Service plan." }, @@ -3302,8 +3302,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "12543749504493145946" + "version": "0.36.1.42791", + "templateHash": "8872422051335608470" }, "description": "Updates app settings for an Azure App Service." }, @@ -3380,8 +3380,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -3449,8 +3449,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -3518,8 +3518,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -3587,8 +3587,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -3653,8 +3653,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "5791452331701735431" + "version": "0.36.1.42791", + "templateHash": "13097350302282890335" }, "description": "Assigns an Azure Key Vault access policy." }, @@ -3728,8 +3728,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "629726085607478347" + "version": "0.36.1.42791", + "templateHash": "399023243105742355" }, "description": "Creates a SQL role assignment under an Azure Cosmos DB account." }, @@ -3875,8 +3875,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "13560289473578764686" + "version": "0.36.1.42791", + "templateHash": "16642907920540663373" } }, "parameters": { @@ -4064,8 +4064,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "2841679603910691651" + "version": "0.36.1.42791", + "templateHash": "7056589812564712804" }, "description": "Creates an Azure App Service in an existing Azure App Service plan." }, @@ -4291,8 +4291,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "12543749504493145946" + "version": "0.36.1.42791", + "templateHash": "8872422051335608470" }, "description": "Updates app settings for an Azure App Service." }, @@ -4369,8 +4369,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -4438,8 +4438,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -4507,8 +4507,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -4576,8 +4576,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -4642,8 +4642,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "5791452331701735431" + "version": "0.36.1.42791", + "templateHash": "13097350302282890335" }, "description": "Assigns an Azure Key Vault access policy." }, @@ -4717,8 +4717,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "629726085607478347" + "version": "0.36.1.42791", + "templateHash": "399023243105742355" }, "description": "Creates a SQL role assignment under an Azure Cosmos DB account." }, @@ -4863,8 +4863,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4289513338391645425" + "version": "0.36.1.42791", + "templateHash": "6540240067745016665" } }, "parameters": { @@ -5041,8 +5041,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "2841679603910691651" + "version": "0.36.1.42791", + "templateHash": "7056589812564712804" }, "description": "Creates an Azure App Service in an existing Azure App Service plan." }, @@ -5268,8 +5268,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "12543749504493145946" + "version": "0.36.1.42791", + "templateHash": "8872422051335608470" }, "description": "Updates app settings for an Azure App Service." }, @@ -5346,8 +5346,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -5415,8 +5415,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -5484,8 +5484,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -5553,8 +5553,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -5619,8 +5619,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "5791452331701735431" + "version": "0.36.1.42791", + "templateHash": "13097350302282890335" }, "description": "Assigns an Azure Key Vault access policy." }, @@ -5774,8 +5774,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4289513338391645425" + "version": "0.36.1.42791", + "templateHash": "6540240067745016665" } }, "parameters": { @@ -5952,8 +5952,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "2841679603910691651" + "version": "0.36.1.42791", + "templateHash": "7056589812564712804" }, "description": "Creates an Azure App Service in an existing Azure App Service plan." }, @@ -6179,8 +6179,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "12543749504493145946" + "version": "0.36.1.42791", + "templateHash": "8872422051335608470" }, "description": "Updates app settings for an Azure App Service." }, @@ -6257,8 +6257,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -6326,8 +6326,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -6395,8 +6395,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -6464,8 +6464,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -6530,8 +6530,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "5791452331701735431" + "version": "0.36.1.42791", + "templateHash": "13097350302282890335" }, "description": "Assigns an Azure Key Vault access policy." }, @@ -6646,8 +6646,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "14115457605195938059" + "version": "0.36.1.42791", + "templateHash": "6861057601973084204" }, "description": "Creates an Application Insights instance and a Log Analytics workspace." }, @@ -6698,8 +6698,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "9595731115688218471" + "version": "0.36.1.42791", + "templateHash": "14042274885298020376" }, "description": "Creates a Log Analytics workspace." }, @@ -6779,8 +6779,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "3999493549432359449" + "version": "0.36.1.42791", + "templateHash": "9396713012578391259" }, "description": "Creates an Application Insights instance based on an existing Log Analytics workspace." }, @@ -6844,8 +6844,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "6799686639811989899" + "version": "0.36.1.42791", + "templateHash": "4772814496944658769" }, "description": "Creates a dashboard for an Application Insights instance." }, @@ -8181,8 +8181,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "15823690482317690294" + "version": "0.36.1.42791", + "templateHash": "14006198047769151392" } }, "parameters": { @@ -8264,8 +8264,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "5709039219186358534" + "version": "0.36.1.42791", + "templateHash": "14924009146925222912" } }, "parameters": { @@ -8430,8 +8430,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "17637493986448103928" + "version": "0.36.1.42791", + "templateHash": "15315839047770251730" } }, "parameters": { @@ -8628,8 +8628,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "1065429039156480859" + "version": "0.36.1.42791", + "templateHash": "11161313400670591675" }, "description": "Creates an Azure Function in an existing Azure App Service plan." }, @@ -8839,8 +8839,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "2841679603910691651" + "version": "0.36.1.42791", + "templateHash": "7056589812564712804" }, "description": "Creates an Azure App Service in an existing Azure App Service plan." }, @@ -9066,8 +9066,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "12543749504493145946" + "version": "0.36.1.42791", + "templateHash": "8872422051335608470" }, "description": "Updates app settings for an Azure App Service." }, @@ -9143,8 +9143,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -9230,8 +9230,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -9299,8 +9299,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -9368,8 +9368,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -9437,8 +9437,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -9506,8 +9506,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -9572,8 +9572,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "5791452331701735431" + "version": "0.36.1.42791", + "templateHash": "13097350302282890335" }, "description": "Assigns an Azure Key Vault access policy." }, @@ -9726,8 +9726,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "17637493986448103928" + "version": "0.36.1.42791", + "templateHash": "15315839047770251730" } }, "parameters": { @@ -9924,8 +9924,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "1065429039156480859" + "version": "0.36.1.42791", + "templateHash": "11161313400670591675" }, "description": "Creates an Azure Function in an existing Azure App Service plan." }, @@ -10135,8 +10135,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "2841679603910691651" + "version": "0.36.1.42791", + "templateHash": "7056589812564712804" }, "description": "Creates an Azure App Service in an existing Azure App Service plan." }, @@ -10362,8 +10362,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "12543749504493145946" + "version": "0.36.1.42791", + "templateHash": "8872422051335608470" }, "description": "Updates app settings for an Azure App Service." }, @@ -10439,8 +10439,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -10526,8 +10526,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -10595,8 +10595,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -10664,8 +10664,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -10733,8 +10733,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -10802,8 +10802,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -10868,8 +10868,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "5791452331701735431" + "version": "0.36.1.42791", + "templateHash": "13097350302282890335" }, "description": "Assigns an Azure Key Vault access policy." }, @@ -10975,8 +10975,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "9442619140000284253" + "version": "0.36.1.42791", + "templateHash": "5396502874055092713" }, "description": "Creates an Azure Cognitive Services instance." }, @@ -11130,8 +11130,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "9442619140000284253" + "version": "0.36.1.42791", + "templateHash": "5396502874055092713" }, "description": "Creates an Azure Cognitive Services instance." }, @@ -11288,8 +11288,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "7566277125956259564" + "version": "0.36.1.42791", + "templateHash": "8223498772551098397" } }, "parameters": { @@ -11421,8 +11421,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "17411923370778016009" + "version": "0.36.1.42791", + "templateHash": "16260688333491233707" }, "description": "Creates an Azure storage account." }, @@ -11649,8 +11649,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -11719,8 +11719,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -11789,8 +11789,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -11859,8 +11859,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "4248204401930713580" + "version": "0.36.1.42791", + "templateHash": "1525080529756490231" }, "description": "Creates a role assignment for a service principal." }, @@ -11941,8 +11941,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "8801108170504436296" + "version": "0.36.1.42791", + "templateHash": "2884445231517776593" } }, "parameters": { @@ -12087,8 +12087,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.35.1.17967", - "templateHash": "16179106956002094983" + "version": "0.36.1.42791", + "templateHash": "14404355068161542913" } }, "parameters": { diff --git a/infra/prompt-flow/cwyd/flow.dag.template.yaml b/infra/prompt-flow/cwyd/flow.dag.template.yaml index 801afa9b2..2b641b45e 100755 --- a/infra/prompt-flow/cwyd/flow.dag.template.yaml +++ b/infra/prompt-flow/cwyd/flow.dag.template.yaml @@ -83,7 +83,7 @@ nodes: type: code path: chat_with_context.jinja2 inputs: - deployment_name: gpt-4o + deployment_name: gpt-4.1 temperature: 0 top_p: 1 max_tokens: 1000 diff --git a/scripts/checkquota.sh b/scripts/checkquota.sh index e36376565..4728b0d3d 100644 --- a/scripts/checkquota.sh +++ b/scripts/checkquota.sh @@ -32,7 +32,7 @@ echo "✅ Azure subscription set successfully." # Define models and their minimum required capacities declare -A MIN_CAPACITY=( - ["OpenAI.Standard.gpt-4o"]=$GPT_MIN_CAPACITY + ["OpenAI.GlobalStandard.gpt4.1"]=$GPT_MIN_CAPACITY ["OpenAI.Standard.text-embedding-ada-002"]=$TEXT_EMBEDDING_MIN_CAPACITY ) diff --git a/tests/e2e-test/README.md b/tests/e2e-test/README.md index ca030cf0a..12e82a51d 100644 --- a/tests/e2e-test/README.md +++ b/tests/e2e-test/README.md @@ -8,7 +8,8 @@ Write end-to-end tests for your web apps with [Playwright](https://github.com/mi - Support for **headless and headed** execution. - **Built-in fixtures** that provide browser primitives to test functions. -Pre-Requisites: + +Pre-Requisites: - Install Visual Studio Code: Download and Install Visual Studio Code(VSCode). - Install NodeJS: Download and Install Node JS @@ -20,10 +21,9 @@ This will create a virtual environment directory named microsoft inside your cur Installing Playwright Pytest from Virtual Environment - To install libraries run "pip install -r requirements.txt" -- Install the required browsers "playwright install" Run test cases -- To run test cases from your 'tests' folder : "pytest --headed --html=report/report.html" +- To run test cases from your 'tests\e2e-test' folder : "pytest --headed --html=report/report.html" Steps need to be followed to enable Access Token and Client Credentials - Go to App Service from the resource group and select the Access Tokens check box in 'Manage->Authentication' tab @@ -37,5 +37,4 @@ Create .env file in project root level with web app url and client credentials tenant_id, web_url and admin_url for the resource group. please refer 'sample_dotenv_file.txt' file. ## Documentation - -See on [playwright.dev](https://playwright.dev/python/docs/test-runners) for examples and more detailed information. \ No newline at end of file +See on [playwright.dev](https://playwright.dev/python/docs/test-runners) for examples and more detailed information. diff --git a/tests/e2e-test/pages/webUserPage.py b/tests/e2e-test/pages/webUserPage.py index 2bea5be84..7abcc8ae6 100644 --- a/tests/e2e-test/pages/webUserPage.py +++ b/tests/e2e-test/pages/webUserPage.py @@ -19,6 +19,9 @@ class WebUserPage(BasePage): CHAT_CLOSE_ICON = "button[title='Hide']" CHAT_HISTORY_OPTIONS = "//button[@id='moreButton']" CHAT_HISTORY_DELETE = "//button[@role='menuitem']" + TOGGLE_CITATIONS_LIST = "[data-testid='toggle-citations-list']" + CITATIONS_CONTAINER = "[data-testid='citations-container']" + CITATION_BLOCK = "[data-testid='citation-block']" def __init__(self, page): self.page = page @@ -76,3 +79,47 @@ def delete_chat_history(self): self.page.get_by_label("hide button").click() self.page.wait_for_load_state("networkidle") self.page.wait_for_timeout(2000) + + def click_reference_link_in_response(self): + response_blocks = self.page.locator(self.ANSWER_TEXT) + last_response = response_blocks.nth(response_blocks.count() - 1) + toggle_button = last_response.locator(self.TOGGLE_CITATIONS_LIST) + citations_container = last_response.locator(self.CITATIONS_CONTAINER) + + + if not citations_container.is_visible(): + toggle_button.click() + self.page.wait_for_timeout(1000) + + citation = citations_container.locator(self.CITATION_BLOCK).first + + + citation.click() + self.page.wait_for_load_state('networkidle') + self.page.wait_for_timeout(2000) + + def close_citation(self): + self.page.wait_for_timeout(3000) + close_btn = self.page.locator(self.CLOSE_CITATIONS) + close_btn.wait_for(state="attached", timeout=5000) + close_btn.scroll_into_view_if_needed() + close_btn.click(force=True) + self.page.wait_for_timeout(5000) + + def has_reference_link(self): + response_blocks = self.page.locator(self.ANSWER_TEXT) + + count = response_blocks.count() + if count == 0: + return False + last_response = response_blocks.nth(count - 1) + toggle_button = last_response.locator(self.TOGGLE_CITATIONS_LIST) + if toggle_button.count() > 0: + toggle_button.click() + + + citations_container = last_response.locator(self.CITATIONS_CONTAINER) + citation_blocks = citations_container.locator(self.CITATION_BLOCK) + citation_count = citation_blocks.count() + + return citation_count > 0 diff --git a/tests/e2e-test/sample_dotenv_file.txt b/tests/e2e-test/sample_dotenv_file.txt index 773f46bae..6b099a241 100644 --- a/tests/e2e-test/sample_dotenv_file.txt +++ b/tests/e2e-test/sample_dotenv_file.txt @@ -4,4 +4,5 @@ user_name = 'user name' pass_word = 'pass word' client_id = 'client id' client_secret = 'client secret' -tenant_id = 'tenant id' \ No newline at end of file +tenant_id = 'tenant id' + diff --git a/tests/e2e-test/tests/test_chat_with_your_data.py b/tests/e2e-test/tests/test_chat_with_your_data.py new file mode 100644 index 000000000..def96c501 --- /dev/null +++ b/tests/e2e-test/tests/test_chat_with_your_data.py @@ -0,0 +1,77 @@ +import logging + +from config.constants import * +from pages.adminPage import AdminPage +from pages.webUserPage import WebUserPage + +logger = logging.getLogger(__name__) + + +def test_golden_path_web_page_demo_script(login_logout): + """Validate Golden path test case for Chat with your Data""" + page = login_logout + page.goto(ADMIN_URL) + logger.info("Step 1: Validate Admin page is loaded.") + admin_page = AdminPage(page) + assert ( + admin_page_title == page.locator(admin_page.ADMIN_PAGE_TITLE).text_content() + ), "page title not found" + logger.info("Step 2: Validate Files are uploaded or not") + admin_page.click_delete_data_tab() + assert ( + page.locator(admin_page.DELETE_CHECK_BOXES).count() >= 1 + ), "Files are not uploaded." + logger.info("Step 3: Validate Web page is loaded.") + page.goto(WEB_URL) + home_page = WebUserPage(page) + logger.info("Step 5: Validate Chat history has been deleted.") + home_page.delete_chat_history() + + failed_questions = [] + logger.info("Step 6: Validate Golden Path prompts response") + + def ask_question_and_check(question, attempt): + home_page.wait_for_load(4000) + home_page.enter_a_question(question) + home_page.click_send_button() + home_page.validate_response_status(question) + + response_text = page.locator(home_page.ANSWER_TEXT) + response_count = response_text.count() + + if home_page.has_reference_link(): + logger.info("Step 6.1: Reference link found. Opening citation.") + home_page.click_reference_link_in_response() + logger.info("Step 6.2: Closing citation.") + home_page.close_citation() + + if response_count == 0: + return False # no response found + + response_text_content = response_text.nth(response_count - 1).text_content() + + if response_text_content == invalid_response: + print(f"[Attempt {attempt}] Invalid response({response_text_content}) for prompt: {question}") + return False + return True + + # First run through all questions + for question in questions: + if not ask_question_and_check(question, attempt=1): + failed_questions.append(question) + + # Retry failed questions once more + if failed_questions: + logger.info("Step 7: Retry failed question one more time.") + for question in failed_questions: + if not ask_question_and_check(question, attempt=2): + home_page.soft_assert( + False, + f"Failed after retry- Invalid response for prompt: {question}", + ) + + logger.info("Step 8: Validate chat history.") + home_page.show_chat_history() + logger.info("Step 9: Validate chat history closed.") + home_page.close_chat_history() + home_page.assert_all()