Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
1cba8a7
foundry sdk update v1
Rafi-Microsoft Oct 30, 2025
6a001cd
update v2
Rafi-Microsoft Oct 30, 2025
05f0d30
updates v2
Rafi-Microsoft Oct 31, 2025
ca8baad
updates v3
Rafi-Microsoft Oct 31, 2025
ad5902b
flake issues fix
Rafi-Microsoft Oct 31, 2025
d53772a
updated test cases for generate title
Rafi-Microsoft Nov 3, 2025
3ce6c85
scripts updated test v1
Rafi-Microsoft Nov 3, 2025
84bf4ce
added logging to the scripts for testing
Rafi-Microsoft Nov 3, 2025
f3ae76e
scripts test v2
Rafi-Microsoft Nov 3, 2025
239fe1c
scripts update v1
Rafi-Microsoft Nov 3, 2025
432fd61
Merge: Azure AI Foundry SDK migration with enhanced logging
Rafi-Microsoft Nov 3, 2025
91fb0f8
script testing v2
Rafi-Microsoft Nov 4, 2025
4680343
updated script test v3
Rafi-Microsoft Nov 4, 2025
80f80c4
testing v4
Rafi-Microsoft Nov 4, 2025
e389474
testing v5
Rafi-Microsoft Nov 4, 2025
15f3c1d
script update testing v6
Rafi-Microsoft Nov 6, 2025
7c705a7
scripts update test v7
Rafi-Microsoft Nov 7, 2025
2f25ca8
removed commented code and final fixes
Rafi-Microsoft Nov 11, 2025
ee59a1c
resolve pylint issues
Rafi-Microsoft Nov 11, 2025
9358db4
Fix dashboard not loading when user is set as Admin
Priyanka-Microsoft Nov 11, 2025
1e81b1f
Merge pull request #641 from microsoft/KM-25966-dashboard-not-loading…
Nov 12, 2025
eb43f1f
feedback changes v1
Rafi-Microsoft Nov 12, 2025
483600e
kmgen-gp-fix
Ritesh-Microsoft Nov 12, 2025
36fcb57
test: kmgen-golden path fixed
Avijit-Microsoft Nov 12, 2025
d261ba0
code cleaning
Rafi-Microsoft Nov 13, 2025
10276a4
Merge branch 'dev' of https://github.com/microsoft/Conversation-Knowl…
Rafi-Microsoft Nov 13, 2025
130cc02
refactor: Replace OpenAI API call with Foundry SDK
Avijit-Microsoft Nov 13, 2025
a215943
Add files via upload
Thanusree-Microsoft Nov 21, 2025
2f37d2d
Update Deployment Guide with Log Analytics note
Thanusree-Microsoft Nov 21, 2025
e411dce
Merge pull request #653 from microsoft/psl-updatedoc
Roopan-Microsoft Nov 24, 2025
f059215
Merge pull request #652 from microsoft/main
Roopan-Microsoft Nov 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions documents/DeploymentGuide.md
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain
5. Once the deployment has completed successfully, open the [Azure Portal](https://portal.azure.com/), go to the deployed resource group, find the App Service, and get the app URL from `Default domain`.

6. If you are done trying out the application, you can delete the resources by running `azd down`.
> **Note:** If you deployed with `enableRedundancy=true` and Log Analytics workspace replication is enabled, you must first disable replication before running `azd down` else resource group delete will fail. Follow the steps in [Handling Log Analytics Workspace Deletion with Replication Enabled](./LogAnalyticsReplicationDisable.md), wait until replication returns `false`, then run `azd down`.

### 🛠️ Troubleshooting
If you encounter any issues during the deployment process, please refer [troubleshooting](../documents/TroubleShootingSteps.md) document for detailed steps and solutions
Expand Down
28 changes: 28 additions & 0 deletions documents/LogAnalyticsReplicationDisable.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# 🛠 Handling Log Analytics Workspace Deletion with Replication Enabled

If redundancy (replication) is enabled for your Log Analytics workspace, you must disable it before deleting the workspace or resource group. Otherwise, deletion will fail.

## ✅ Steps to Disable Replication Before Deletion
Run the following Azure CLI command. Note: This operation may take about 5 minutes to complete.

```bash
az resource update --ids "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.OperationalInsights/workspaces/{logAnalyticsName}" --set properties.replication.enabled=false
```

Replace:
- `{subscriptionId}` → Your Azure subscription ID
- `{resourceGroupName}` → The name of your resource group
- `{logAnalyticsName}` → The name of your Log Analytics workspace

Optional: Verify replication disabled (should output `false`):
```bash
az resource show --ids "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.OperationalInsights/workspaces/{logAnalyticsName}" --query properties.replication.enabled -o tsv
```

## ✅ After Disabling Replication
You can safely delete:
- The Log Analytics workspace (manual)
- The resource group (manual), or
- All provisioned resources via `azd down`

Return to: [Deployment Guide](./DeploymentGuide.md)
49 changes: 35 additions & 14 deletions infra/main.bicep
Original file line number Diff line number Diff line change
Expand Up @@ -506,11 +506,11 @@ module userAssignedIdentity 'br/public:avm/res/managed-identity/user-assigned-id

// ========== SQL Operations User Assigned Identity ========== //
// Dedicated identity for backend SQL operations with limited permissions (db_datareader, db_datawriter)
var sqlUserAssignedIdentityResourceName = 'id-sql-${solutionSuffix}'
module sqlUserAssignedIdentity 'br/public:avm/res/managed-identity/user-assigned-identity:0.4.1' = {
name: take('avm.res.managed-identity.user-assigned-identity.${sqlUserAssignedIdentityResourceName}', 64)
var backendUserAssignedIdentityResourceName = 'id-backend-${solutionSuffix}'
module backendUserAssignedIdentity 'br/public:avm/res/managed-identity/user-assigned-identity:0.4.1' = {
name: take('avm.res.managed-identity.user-assigned-identity.${backendUserAssignedIdentityResourceName}', 64)
params: {
name: sqlUserAssignedIdentityResourceName
name: backendUserAssignedIdentityResourceName
location: location
tags: tags
enableTelemetry: enableTelemetry
Expand Down Expand Up @@ -767,6 +767,11 @@ module aiFoundryAiServices 'modules/ai-services.bicep' = if (aiFoundryAIservices
principalId: userAssignedIdentity.outputs.principalId
principalType: 'ServicePrincipal'
}
{
roleDefinitionIdOrName: '53ca6127-db72-4b80-b1b0-d745d6d5456d' // Azure AI User
principalId: backendUserAssignedIdentity.outputs.principalId
principalType: 'ServicePrincipal'
}
{
roleDefinitionIdOrName: '64702f94-c441-49e6-a78b-ef80e0188fee' // Azure AI Developer
principalId: userAssignedIdentity.outputs.principalId
Expand All @@ -777,6 +782,16 @@ module aiFoundryAiServices 'modules/ai-services.bicep' = if (aiFoundryAIservices
principalId: userAssignedIdentity.outputs.principalId
principalType: 'ServicePrincipal'
}
{
roleDefinitionIdOrName: '64702f94-c441-49e6-a78b-ef80e0188fee' // Azure AI Developer
principalId: backendUserAssignedIdentity.outputs.principalId
principalType: 'ServicePrincipal'
}
{
roleDefinitionIdOrName: '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd' // Cognitive Services OpenAI User
principalId: backendUserAssignedIdentity.outputs.principalId
principalType: 'ServicePrincipal'
}
]
// WAF aligned configuration for Monitoring
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null
Expand Down Expand Up @@ -946,6 +961,11 @@ module searchSearchServices 'br/public:avm/res/search/search-service:0.11.1' = {
principalId: userAssignedIdentity.outputs.principalId
principalType: 'ServicePrincipal'
}
{
roleDefinitionIdOrName: '1407120a-92aa-4202-b7e9-c0e197c71c8f'
principalId: backendUserAssignedIdentity.outputs.principalId
principalType: 'ServicePrincipal'
}
{
roleDefinitionIdOrName: '1407120a-92aa-4202-b7e9-c0e197c71c8f' // Search Index Data Reader
principalId: !useExistingAiFoundryAiProject ? aiFoundryAiServices.outputs.aiProjectInfo.aiprojectSystemAssignedMIPrincipalId : existingAiFoundryAiServicesProject!.identity.principalId
Expand Down Expand Up @@ -1182,7 +1202,7 @@ module cosmosDb 'br/public:avm/res/document-db/database-account:0.15.0' = {
'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*'
'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*'
]
assignments: [{ principalId: userAssignedIdentity.outputs.principalId }]
assignments: [{ principalId: backendUserAssignedIdentity.outputs.principalId }]
}
]
// WAF aligned configuration for Monitoring
Expand Down Expand Up @@ -1278,6 +1298,7 @@ module sqlDBModule 'br/public:avm/res/sql/server:0.20.1' = {
systemAssigned: true
userAssignedResourceIds: [
userAssignedIdentity.outputs.resourceId
backendUserAssignedIdentity.outputs.resourceId
]
}
primaryUserAssignedIdentityResourceId: userAssignedIdentity.outputs.resourceId
Expand Down Expand Up @@ -1396,8 +1417,8 @@ module createSqlUserAndRole 'br/public:avm/res/resources/deployment-script:0.5.1
[
'-SqlServerName \'${sqlServerResourceName}\''
'-SqlDatabaseName \'${sqlDbModuleName}\''
'-ClientId \'${sqlUserAssignedIdentity.outputs.clientId}\''
'-DisplayName \'${sqlUserAssignedIdentity.outputs.name}\''
'-ClientId \'${backendUserAssignedIdentity.outputs.clientId}\''
'-DisplayName \'${backendUserAssignedIdentity.outputs.name}\''
'-DatabaseRoles \'${join(databaseRoles, ',')}\''
],
' '
Expand Down Expand Up @@ -1513,7 +1534,7 @@ module webSiteBackend 'modules/web-sites.bicep' = {
managedIdentities: {
systemAssigned: true
userAssignedResourceIds: [
userAssignedIdentity.outputs.resourceId
backendUserAssignedIdentity.outputs.resourceId
]
}
siteConfig: {
Expand All @@ -1539,7 +1560,7 @@ module webSiteBackend 'modules/web-sites.bicep' = {
AZURE_COSMOSDB_ENABLE_FEEDBACK: 'True'
SQLDB_DATABASE: 'sqldb-${solutionSuffix}'
SQLDB_SERVER: '${sqlDBModule.outputs.name }${environment().suffixes.sqlServerHostname}'
SQLDB_USER_MID: sqlUserAssignedIdentity.outputs.clientId
SQLDB_USER_MID: backendUserAssignedIdentity.outputs.clientId
AZURE_AI_SEARCH_ENDPOINT: 'https://${aiSearchName}.search.windows.net'
AZURE_AI_SEARCH_INDEX: 'call_transcripts_index'
AZURE_AI_SEARCH_CONNECTION_NAME: aiSearchName
Expand All @@ -1549,7 +1570,7 @@ module webSiteBackend 'modules/web-sites.bicep' = {
DUMMY_TEST: 'True'
SOLUTION_NAME: solutionSuffix
APP_ENV: 'Prod'
AZURE_CLIENT_ID: userAssignedIdentity.outputs.clientId
AZURE_CLIENT_ID: backendUserAssignedIdentity.outputs.clientId
}
// WAF aligned configuration for Monitoring
applicationInsightResourceId: enableMonitoring ? applicationInsights!.outputs.resourceId : null
Expand Down Expand Up @@ -1628,10 +1649,10 @@ output AZURE_AI_FOUNDRY_NAME string = !empty(existingAIServicesName) ? existingA
output AZURE_AI_PROJECT_NAME string = !empty(existingAIProjectName) ? existingAIProjectName : aiFoundryAiServices.outputs.aiProjectInfo.name

@description('Contains Azure AI Search service name.')
output AZURE_AI_SEARCH_NAME string = !empty(existingAIServicesName) ? existingAIServicesName : aiFoundryAiServicesResourceName
output AZURE_AI_SEARCH_NAME string = aiSearchName

@description('Contains Azure AI Search endpoint URL.')
output AZURE_AI_SEARCH_ENDPOINT string = 'https://${aiFoundryAiServices.outputs.name}.search.windows.net'
output AZURE_AI_SEARCH_ENDPOINT string = 'https://${aiSearchName}.search.windows.net'

@description('Contains Azure AI Search index name.')
output AZURE_AI_SEARCH_INDEX string = 'call_transcripts_index'
Expand Down Expand Up @@ -1682,10 +1703,10 @@ output REACT_APP_LAYOUT_CONFIG string = reactAppLayoutConfig
output SQLDB_DATABASE string = 'sqldb-${solutionSuffix}'

@description('Contains SQL server name.')
output SQLDB_SERVER string = sqlDBModule.outputs.name
output SQLDB_SERVER string = '${sqlDBModule.outputs.name }${environment().suffixes.sqlServerHostname}'

@description('Contains SQL database user managed identity client ID.')
output SQLDB_USER_MID string = sqlUserAssignedIdentity.outputs.clientId
output SQLDB_USER_MID string = backendUserAssignedIdentity.outputs.clientId

@description('Contains AI project client usage setting.')
output USE_AI_PROJECT_CLIENT string = 'False'
Expand Down
Loading
Loading