Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 4 additions & 4 deletions .github/workflows/CAdeploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,8 @@ jobs:
echo "STORAGE_CONTAINER=$STORAGE_CONTAINER" >> $GITHUB_ENV
export KEYVAULT_NAME=$(echo "$DEPLOY_OUTPUT" | jq -r '.keY_VAULT_NAME.value')
echo "KEYVAULT_NAME=$KEYVAULT_NAME" >> $GITHUB_ENV
export SQL_SERVER=$(echo "$DEPLOY_OUTPUT" | jq -r '.sqldB_SERVER.value')
echo "SQL_SERVER=$SQL_SERVER" >> $GITHUB_ENV
export SQL_SERVER_NAME=$(echo "$DEPLOY_OUTPUT" | jq -r '.sqldB_SERVER_NAME.value')
echo "SQL_SERVER_NAME=$SQL_SERVER_NAME" >> $GITHUB_ENV
export SQL_DATABASE=$(echo "$DEPLOY_OUTPUT" | jq -r '.sqldB_DATABASE.value')
echo "SQL_DATABASE=$SQL_DATABASE" >> $GITHUB_ENV
export CLIENT_ID=$(echo "$DEPLOY_OUTPUT" | jq -r '.managedidentitY_WEBAPP_CLIENTID.value')
Expand Down Expand Up @@ -220,7 +220,7 @@ jobs:
"" \
"${{ secrets.AZURE_CLIENT_ID }}" \
"${{ env.RG_NAME }}" \
"${{ env.SQL_SERVER }}" \
"${{ env.SQL_SERVER_NAME }}" \
"${{ env.AI_FOUNDARY_NAME }}" \
"${{ env.SEARCH_SERVICE_NAME }}" \
"${{ env.RESOURCE_GROUP_NAME_FOUNDRY }}"
Expand All @@ -232,7 +232,7 @@ jobs:
]'

bash ./infra/scripts/add_user_scripts/create_sql_user_and_role.sh \
"${{ env.SQL_SERVER }}.database.windows.net" \
"${{ env.SQL_SERVER_NAME }}.database.windows.net" \
"${{ env.SQL_DATABASE }}" \
"$user_roles_json" \
"${{ secrets.AZURE_CLIENT_ID }}"
Expand Down
5 changes: 4 additions & 1 deletion docs/LocalSetupAndDeploy.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@ Navigate to the `App` folder located in the `src` directory of the repository us

### 2. Configure Environment Variables
- Copy the `.env.sample` file to a new file named `.env`.
- Update the `.env` file with the required values from your Azure resource group.
- Update the `.env` file with the required values from your Azure resource group in Azure Portal App Service environment variables.
- Alternatively, if resources were
provisioned using `azd provision` or `azd up`, a `.env` file is automatically generated in the `.azure/<env-name>/.env`
file. To get your `<env-name>` run `azd env list` to see which env is default.

### 3. Start the Application
- Run `start.cmd` (Windows) or `start.sh` (Linux/Mac) to:
Expand Down
1 change: 1 addition & 0 deletions infra/deploy_ai_foundry.bicep
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,7 @@ output aiSearchService string = aiSearch.name
output aiFoundryProjectName string = !empty(existingAIProjectName) ? existingAIProjectName : aiFoundryProject.name

output applicationInsightsId string = applicationInsights.id
output instrumentationKey string = applicationInsights.properties.InstrumentationKey
output logAnalyticsWorkspaceResourceName string = useExisting ? existingLogAnalyticsWorkspace.name : logAnalytics.name
output logAnalyticsWorkspaceResourceGroup string = useExisting ? existingLawResourceGroup : resourceGroup().name

Expand Down
3 changes: 2 additions & 1 deletion infra/deploy_app_service.bicep
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ param HostingPlanSku string = 'B2'

param HostingPlanName string
param WebsiteName string
param AppEnvironment string

// @description('Name of Application Insights')
// param ApplicationInsightsName string = '${ solutionName }-app-insights'
Expand Down Expand Up @@ -187,7 +188,7 @@ resource Website 'Microsoft.Web/sites@2020-06-01' = {
appSettings: [
{
name: 'APP_ENV'
value: 'Prod'
value: AppEnvironment
}
{
name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
Expand Down
123 changes: 99 additions & 24 deletions infra/main.bicep
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ param embeddingDeploymentCapacity int = 80

// @description('Fabric Workspace Id if you have one, else leave it empty. ')
// param fabricWorkspaceId string
@description('The Docker image tag to use for the application deployment.')
param imageTag string = 'latest'

//restricting to these regions because assistants api for gpt-4o-mini is available only in these regions
Expand Down Expand Up @@ -84,6 +85,34 @@ var abbrs = loadJsonContent('./abbreviations.json')
//var solutionLocation = resourceGroupLocation
// var baseUrl = 'https://raw.githubusercontent.com/microsoft/Build-your-own-copilot-Solution-Accelerator/main/'

var hostingPlanName = '${abbrs.compute.appServicePlan}${solutionPrefix}'
var websiteName = '${abbrs.compute.webApp}${solutionPrefix}'
var appEnvironment = 'Prod'
var azureSearchIndex = 'transcripts_index'
var azureSearchUseSemanticSearch = 'True'
var azureSearchSemanticSearchConfig = 'my-semantic-config'
var azureSearchTopK = '5'
var azureSearchContentColumns = 'content'
var azureSearchFilenameColumn = 'chunk_id'
var azureSearchTitleColumn = 'client_id'
var azureSearchUrlColumn = 'sourceurl'
var azureOpenAITemperature = '0'
var azureOpenAITopP = '1'
var azureOpenAIMaxTokens = '1000'
var azureOpenAIStopSequence = '\n'
var azureOpenAISystemMessage = '''You are a helpful Wealth Advisor assistant'''
var azureOpenAIStream = 'True'
var azureSearchQueryType = 'simple'
var azureSearchVectorFields = 'contentVector'
var azureSearchPermittedGroupsField = ''
var azureSearchStrictness = '3'
var azureSearchEnableInDomain = 'False' // Set to 'True' if you want to enable in-domain search
var azureCosmosDbEnableFeedback = 'True'
var useInternalStream = 'True'
var useAIProjectClientFlag = 'False'
var sqlServerFqdn = '${sqlDBModule.outputs.sqlServerName}.database.windows.net'


var functionAppSqlPrompt = '''Generate a valid T-SQL query to find {query} for tables and columns provided below:
1. Table: Clients
Columns: ClientId, Client, Email, Occupation, MaritalStatus, Dependents
Expand Down Expand Up @@ -219,40 +248,41 @@ module appserviceModule 'deploy_app_service.bicep' = {
name: 'deploy_app_service'
params: {
solutionLocation: solutionLocation
HostingPlanName: '${abbrs.compute.appServicePlan}${solutionPrefix}'
WebsiteName: '${abbrs.compute.webApp}${solutionPrefix}'
HostingPlanName: hostingPlanName
WebsiteName: websiteName
AppEnvironment: appEnvironment
AzureSearchService: aifoundry.outputs.aiSearchService
AzureSearchIndex: 'transcripts_index'
AzureSearchUseSemanticSearch: 'True'
AzureSearchSemanticSearchConfig: 'my-semantic-config'
AzureSearchTopK: '5'
AzureSearchContentColumns: 'content'
AzureSearchFilenameColumn: 'chunk_id'
AzureSearchTitleColumn: 'client_id'
AzureSearchUrlColumn: 'sourceurl'
AzureSearchIndex: azureSearchIndex
AzureSearchUseSemanticSearch: azureSearchUseSemanticSearch
AzureSearchSemanticSearchConfig: azureSearchSemanticSearchConfig
AzureSearchTopK: azureSearchTopK
AzureSearchContentColumns: azureSearchContentColumns
AzureSearchFilenameColumn: azureSearchFilenameColumn
AzureSearchTitleColumn: azureSearchTitleColumn
AzureSearchUrlColumn: azureSearchUrlColumn
AzureOpenAIResource: aifoundry.outputs.aiFoundryName
AzureOpenAIEndpoint: aifoundry.outputs.aoaiEndpoint
AzureOpenAIModel: gptModelName
AzureOpenAITemperature: '0'
AzureOpenAITopP: '1'
AzureOpenAIMaxTokens: '1000'
AzureOpenAIStopSequence: ''
AzureOpenAISystemMessage: '''You are a helpful Wealth Advisor assistant'''
AzureOpenAITemperature: azureOpenAITemperature
AzureOpenAITopP: azureOpenAITopP
AzureOpenAIMaxTokens: azureOpenAIMaxTokens
AzureOpenAIStopSequence: azureOpenAIStopSequence
AzureOpenAISystemMessage: azureOpenAISystemMessage
AzureOpenAIApiVersion: azureOpenaiAPIVersion
AzureOpenAIStream: 'True'
AzureSearchQueryType: 'simple'
AzureSearchVectorFields: 'contentVector'
AzureSearchPermittedGroupsField: ''
AzureSearchStrictness: '3'
AzureOpenAIStream: azureOpenAIStream
AzureSearchQueryType: azureSearchQueryType
AzureSearchVectorFields: azureSearchVectorFields
AzureSearchPermittedGroupsField: azureSearchPermittedGroupsField
AzureSearchStrictness: azureSearchStrictness
AzureOpenAIEmbeddingName: embeddingModel
AzureOpenAIEmbeddingEndpoint: aifoundry.outputs.aoaiEndpoint
USE_INTERNAL_STREAM: 'True'
SQLDB_SERVER: '${sqlDBModule.outputs.sqlServerName}.database.windows.net'
USE_INTERNAL_STREAM: useInternalStream
SQLDB_SERVER: sqlServerFqdn
SQLDB_DATABASE: sqlDBModule.outputs.sqlDbName
AZURE_COSMOSDB_ACCOUNT: cosmosDBModule.outputs.cosmosAccountName
AZURE_COSMOSDB_CONVERSATIONS_CONTAINER: cosmosDBModule.outputs.cosmosContainerName
AZURE_COSMOSDB_DATABASE: cosmosDBModule.outputs.cosmosDatabaseName
AZURE_COSMOSDB_ENABLE_FEEDBACK: 'True'
AZURE_COSMOSDB_ENABLE_FEEDBACK: azureCosmosDbEnableFeedback
//VITE_POWERBI_EMBED_URL: 'TBD'
imageTag: imageTag
userassignedIdentityClientId: managedIdentityModule.outputs.managedIdentityWebAppOutput.clientId
Expand All @@ -279,10 +309,55 @@ output KEY_VAULT_NAME string = keyvaultModule.outputs.keyvaultName
output COSMOSDB_ACCOUNT_NAME string = cosmosDBModule.outputs.cosmosAccountName
output RESOURCE_GROUP_NAME string = resourceGroup().name
output RESOURCE_GROUP_NAME_FOUNDRY string = aifoundry.outputs.resourceGroupNameFoundry
output SQLDB_SERVER string = sqlDBModule.outputs.sqlServerName
output SQLDB_SERVER_NAME string = sqlDBModule.outputs.sqlServerName
output SQLDB_DATABASE string = sqlDBModule.outputs.sqlDbName
output MANAGEDIDENTITY_WEBAPP_NAME string = managedIdentityModule.outputs.managedIdentityWebAppOutput.name
output MANAGEDIDENTITY_WEBAPP_CLIENTID string = managedIdentityModule.outputs.managedIdentityWebAppOutput.clientId
output AI_FOUNDRY_NAME string = aifoundry.outputs.aiFoundryName
output AI_SEARCH_SERVICE_NAME string = aifoundry.outputs.aiSearchService
output WEB_APP_NAME string = appserviceModule.outputs.webAppName
output APP_ENV string = appEnvironment
output APPINSIGHTS_INSTRUMENTATIONKEY string = aifoundry.outputs.instrumentationKey
output APPLICATIONINSIGHTS_CONNECTION_STRING string = aifoundry.outputs.applicationInsightsConnectionString
output AZURE_AI_AGENT_API_VERSION string = azureOpenaiAPIVersion
output AZURE_AI_AGENT_ENDPOINT string = aifoundry.outputs.aiFoundryProjectEndpoint
output AZURE_AI_AGENT_MODEL_DEPLOYMENT_NAME string = gptModelName
output AZURE_AI_SEARCH_ENDPOINT string = aifoundry.outputs.aiSearchTarget
output AZURE_CALL_TRANSCRIPT_SYSTEM_PROMPT string = functionAppCallTranscriptSystemPrompt
output AZURE_COSMOSDB_ACCOUNT string = cosmosDBModule.outputs.cosmosAccountName
output AZURE_COSMOSDB_CONVERSATIONS_CONTAINER string = cosmosDBModule.outputs.cosmosContainerName
output AZURE_COSMOSDB_DATABASE string = cosmosDBModule.outputs.cosmosDatabaseName
output AZURE_COSMOSDB_ENABLE_FEEDBACK string = azureCosmosDbEnableFeedback
output AZURE_OPENAI_EMBEDDING_ENDPOINT string = aifoundry.outputs.aoaiEndpoint
output AZURE_OPENAI_EMBEDDING_NAME string = embeddingModel
output AZURE_OPENAI_ENDPOINT string = aifoundry.outputs.aoaiEndpoint
output AZURE_OPENAI_MAX_TOKENS string = azureOpenAIMaxTokens
output AZURE_OPENAI_MODEL string = gptModelName
output AZURE_OPENAI_PREVIEW_API_VERSION string = azureOpenaiAPIVersion
output AZURE_OPENAI_RESOURCE string = aifoundry.outputs.aiFoundryName
output AZURE_OPENAI_STOP_SEQUENCE string = azureOpenAIStopSequence
output AZURE_OPENAI_STREAM string = azureOpenAIStream
output AZURE_OPENAI_STREAM_TEXT_SYSTEM_PROMPT string = functionAppStreamTextSystemPrompt
output AZURE_OPENAI_SYSTEM_MESSAGE string = azureOpenAISystemMessage
output AZURE_OPENAI_TEMPERATURE string = azureOpenAITemperature
output AZURE_OPENAI_TOP_P string = azureOpenAITopP
output AZURE_SEARCH_CONNECTION_NAME string = aifoundry.outputs.aiSearchFoundryConnectionName
output AZURE_SEARCH_CONTENT_COLUMNS string = azureSearchContentColumns
output AZURE_SEARCH_ENABLE_IN_DOMAIN string = azureSearchEnableInDomain
output AZURE_SEARCH_FILENAME_COLUMN string = azureSearchFilenameColumn
output AZURE_SEARCH_INDEX string = azureSearchIndex
output AZURE_SEARCH_PERMITTED_GROUPS_COLUMN string = azureSearchPermittedGroupsField
output AZURE_SEARCH_QUERY_TYPE string = azureSearchQueryType
output AZURE_SEARCH_SEMANTIC_SEARCH_CONFIG string = azureSearchSemanticSearchConfig
output AZURE_SEARCH_SERVICE string = aifoundry.outputs.aiSearchService
output AZURE_SEARCH_STRICTNESS string = azureSearchStrictness
output AZURE_SEARCH_TITLE_COLUMN string = azureSearchTitleColumn
output AZURE_SEARCH_TOP_K string = azureSearchTopK
output AZURE_SEARCH_URL_COLUMN string = azureSearchUrlColumn
output AZURE_SEARCH_USE_SEMANTIC_SEARCH string = azureSearchUseSemanticSearch
output AZURE_SEARCH_VECTOR_COLUMNS string = azureSearchVectorFields
output AZURE_SQL_SYSTEM_PROMPT string = functionAppSqlPrompt
output SQLDB_SERVER string = sqlServerFqdn
output SQLDB_USER_MID string = managedIdentityModule.outputs.managedIdentityWebAppOutput.clientId
output USE_AI_PROJECT_CLIENT string = useAIProjectClientFlag
output USE_INTERNAL_STREAM string = useInternalStream
Loading