@@ -13,18 +13,13 @@ param tenantId string = tenant().tenantId
1313param authTenantId string = ''
1414
1515var tenantIdForAuth = !empty (authTenantId ) ? authTenantId : tenantId
16- var authenticationIssuerUri = '${ environment (). authentication . loginEndpoint }${ tenantIdForAuth }/v2.0'
16+
1717
1818// Used for the optional login and document level access control system
1919param useAuthentication bool = true
20- param enableUnauthenticatedAccess bool = false
21-
2220param serverAppId string = ''
23- @secure ()
24- param serverAppSecret string = ''
2521param clientAppId string = ''
26- @secure ()
27- param clientAppSecret string = ''
22+
2823
2924@allowed (['None' , 'AzureServices' ])
3025@description ('If allowedIp is set, whether azure services are allowed to bypass the storage and AI services firewall.' )
@@ -69,6 +64,9 @@ param enableGlobalDocumentAccess bool = true
6964@description ('Use Service Bus for indexing documents requests' )
7065param useServiceBusIndexing bool = false
7166
67+ param useEval bool = false
68+ param useSafetyEval bool = false
69+
7270@allowed (['free' , 'provisioned' , 'serverless' ])
7371param cosmosDbSkuName string // Set in main.parameters.json
7472param cosmodDbResourceGroupName string = ''
@@ -104,11 +102,34 @@ param documentIntelligenceResourceGroupLocation string = location
104102
105103param documentIntelligenceSkuName string = 'S0'
106104
107- param chatGptDeploymentName string // Set in main.parameters.json
108- param chatGptDeploymentCapacity int = 80
109- param chatGptDeploymentSkuName string = 'Standard'
110- param chatGptModelName string = 'gpt-4o-mini'
111- param chatGptModelVersion string = '2024-07-18'
105+ param azureOpenAiDisableKeys bool = true
106+ param chatGptModelName string = ''
107+ param chatGptDeploymentName string = ''
108+ param chatGptDeploymentVersion string = ''
109+ param chatGptDeploymentSkuName string = ''
110+ param chatGptDeploymentCapacity int = 0
111+
112+ var chatGpt = {
113+ modelName : !empty (chatGptModelName ) ? chatGptModelName : 'gpt-4o-mini'
114+ deploymentName : !empty (chatGptDeploymentName ) ? chatGptDeploymentName : 'gpt-4o-mini'
115+ deploymentVersion : !empty (chatGptDeploymentVersion ) ? chatGptDeploymentVersion : '2024-07-18'
116+ deploymentSkuName : !empty (chatGptDeploymentSkuName ) ? chatGptDeploymentSkuName : 'GlobalStandard' // Not backward-compatible
117+ deploymentCapacity : chatGptDeploymentCapacity != 0 ? chatGptDeploymentCapacity : 30
118+ }
119+
120+ param evalModelName string = ''
121+ param evalDeploymentName string = ''
122+ param evalModelVersion string = ''
123+ param evalDeploymentSkuName string = ''
124+ param evalDeploymentCapacity int = 0
125+
126+ var eval = {
127+ modelName : !empty (evalModelName ) ? evalModelName : 'gpt-4o'
128+ deploymentName : !empty (evalDeploymentName ) ? evalDeploymentName : 'gpt-4o'
129+ deploymentVersion : !empty (evalModelVersion ) ? evalModelVersion : '2024-08-06'
130+ deploymentSkuName : !empty (evalDeploymentSkuName ) ? evalDeploymentSkuName : 'GlobalStandard' // Not backward-compatible
131+ deploymentCapacity : evalDeploymentCapacity != 0 ? evalDeploymentCapacity : 30
132+ }
112133
113134param embeddingModelName string = ''
114135param embeddingDeploymentName string = ''
@@ -419,43 +440,72 @@ module web './app/web.bicep' = {
419440 }
420441}
421442
422-
423- module openAi '../../shared/ai/cognitiveservices.bicep' = {
424- name : 'openai'
425- scope : openAiResourceGroup
426- params : {
427- name : ! empty ( openAiServiceName ) ? openAiServiceName : '${ abbrs . cognitiveServicesAccounts }${ resourceToken }'
428- location : ! empty ( customOpenAiResourceGroupLocation ) ? customOpenAiResourceGroupLocation : openAiResourceGroupLocation
429- tags : tags
443+ var defaultOpenAiDeployments = [
444+ {
445+ name : chatGpt . deploymentName
446+ model : {
447+ format : 'OpenAI'
448+ name : chatGpt . modelName
449+ version : chatGpt . deploymentVersion
450+ }
430451 sku : {
431- name : openAiSkuName
452+ name : chatGpt .deploymentSkuName
453+ capacity : chatGpt .deploymentCapacity
432454 }
433- deployments : [
434- {
435- name : chatGptDeploymentName
436- model : {
437- format : 'OpenAI'
438- name : chatGptModelName
439- version : chatGptModelVersion
440- }
441- sku : {
442- name : chatGptDeploymentSkuName
443- capacity : chatGptDeploymentCapacity
444- }
445- }
455+ }
456+ {
457+ name : embedding .deploymentName
458+ model : {
459+ format : 'OpenAI'
460+ name : embedding .modelName
461+ version : embedding .deploymentVersion
462+ }
463+ sku : {
464+ name : embedding .deploymentSkuName
465+ capacity : embedding .deploymentCapacity
466+ }
467+ }
468+ ]
469+
470+ var openAiDeployments = concat (
471+ defaultOpenAiDeployments ,
472+ useEval
473+ ? [
446474 {
447- name : embedding .deploymentName
475+ name : eval .deploymentName
448476 model : {
449477 format : 'OpenAI'
450- name : embedding .modelName
451- version : embedding .deploymentVersion
478+ name : eval .modelName
479+ version : eval .deploymentVersion
452480 }
453481 sku : {
454- name : embedding .deploymentSkuName
455- capacity : embedding .deploymentCapacity
482+ name : eval .deploymentSkuName
483+ capacity : eval .deploymentCapacity
456484 }
457485 }
458- ]
486+ ] : []
487+ )
488+
489+
490+ module openAi 'br/public:avm/res/cognitive-services/account:0.7.2' = {
491+ name : 'openai'
492+ scope : openAiResourceGroup
493+ params : {
494+ name : !empty (openAiServiceName ) ? openAiServiceName : '${abbrs .cognitiveServicesAccounts }${resourceToken }'
495+ location : !empty (customOpenAiResourceGroupLocation ) ? customOpenAiResourceGroupLocation : openAiResourceGroupLocation
496+ tags : tags
497+ kind : 'OpenAI'
498+ customSubDomainName : !empty (openAiServiceName )
499+ ? openAiServiceName
500+ : '${abbrs .cognitiveServicesAccounts }${resourceToken }'
501+ publicNetworkAccess : publicNetworkAccess
502+ networkAcls : {
503+ defaultAction : 'Allow'
504+ bypass : bypass
505+ }
506+ sku : openAiSkuName
507+ deployments : openAiDeployments
508+ disableLocalAuth : azureOpenAiDisableKeys
459509 }
460510}
461511
@@ -501,7 +551,7 @@ module storage '../../shared/storage/storage-account.bicep' = {
501551 tags : tags
502552 allowBlobPublicAccess : false
503553 publicNetworkAccess : 'Enabled'
504- isHnsEnabled : true
554+ isHnsEnabled : false
505555 sku : {
506556 name : storageSkuName
507557 }
@@ -610,6 +660,21 @@ module cosmosDb 'br/public:avm/res/document-db/database-account:0.6.1' = if (use
610660 }
611661}
612662
663+ module ai '../../shared/ai/ai-environment.bicep' = if (useSafetyEval ) {
664+ name : 'ai'
665+ scope : resourceGroup
666+ params : {
667+ // Limited region support: https://learn.microsoft.com/azure/ai-foundry/how-to/develop/evaluate-sdk#region-support
668+ location : 'eastus2'
669+ tags : tags
670+ hubName : 'aihub-${resourceToken }'
671+ projectName : 'aiproj-${resourceToken }'
672+ storageAccountId : storage .outputs .id
673+ applicationInsightsId : !useApplicationInsights ? '' : monitoring .outputs .applicationInsightsId
674+ }
675+ }
676+
677+
613678
614679// USER ROLES
615680module openAiRoleUser '../../shared/security/role.bicep' = {
@@ -835,6 +900,12 @@ output AZURE_OPENAI_EMB_DEPLOYMENT string = embedding.deploymentName
835900output AZURE_OPENAI_EMB_DEPLOYMENT_VERSION string = embedding .deploymentVersion
836901output AZURE_OPENAI_EMB_DEPLOYMENT_SKU string = embedding .deploymentSkuName
837902
903+ // Specific to Azure OpenAI with eval
904+ output AZURE_OPENAI_EVAL_DEPLOYMENT string = useEval ? eval .deploymentName : ''
905+ output AZURE_OPENAI_EVAL_DEPLOYMENT_VERSION string = useEval ? eval .deploymentVersion : ''
906+ output AZURE_OPENAI_EVAL_DEPLOYMENT_SKU string = useEval ? eval .deploymentSkuName : ''
907+ output AZURE_OPENAI_EVAL_MODEL string = useEval ? eval .modelName : ''
908+
838909// Used only with non-Azure OpenAI deployments
839910output OPENAI_API_KEY string = openAiApiKey
840911output OPENAI_ORGANIZATION string = openAiApiOrganization
@@ -865,6 +936,7 @@ output USE_CHAT_HISTORY_BROWSER bool = useChatHistoryBrowser
865936output USE_CHAT_HISTORY_COSMOS bool = useChatHistoryCosmos
866937output USE_SERVICEBUS_INDEXING bool = useServiceBusIndexing
867938
939+ output AZURE_AI_PROJECT string = useSafetyEval ? ai .outputs .projectName : ''
868940output WEB_URI string = web .outputs .SERVICE_WEB_URI
869941output INDEXER_URI string = indexer .outputs .SERVICE_INDEXER_URI
870942// output INDEXER_FUNCTIONAPP_NAME string = indexer.outputs.name
0 commit comments