This article is the reference for the Aspire Azure OpenAI hosting integration. It enumerates the AppHost APIs — with examples for both AppHost.cs and apphost.ts — that you use to model an Azure OpenAI account and deployment resources in your AppHost project.
Once you’ve installed the hosting integration in your AppHost project, you can add an Azure OpenAI account resource and then add one or more deployment resources beneath it:
Error ts(2345) ― Argument of type 'AzureOpenAIDeploymentResource' is not assignable to parameter of type 'IResource'.
Types of property 'withRoleAssignments' are incompatible.
Type '(target: AzureOpenAIResource, roles: AzureOpenAIRole[]) => AzureOpenAIDeploymentResource' is not assignable to type '{ (target: AzureAppConfigurationResource, roles: AzureAppConfigurationRole[]): IResource; (target: AzureOpenAIResource, roles: AzureOpenAIRole[]): IResource; (target: AzureContainerRegistryResource, roles: AzureContainerRegistryRole[]): IResource; (target: AzureEventHubsResource, roles: AzureEventHubsRole[]): IResou...'.
Types of parameters 'target' and 'target' are incompatible.
Property 'addDeployment' is missing in type 'AzureAppConfigurationResource' but required in type 'AzureOpenAIResource'.
// After adding all resources, run the app...
Calling AddAzureOpenAI (or addAzureOpenAI) creates an AzureOpenAIResource that models the Azure Cognitive Services account. It implicitly calls AddAzureProvisioning, which adds support for generating Azure resources dynamically during app startup.
Calling AddDeployment (or addDeployment) creates an AzureOpenAIDeploymentResource child that represents a model deployment on the account. Specify the deployment name, model name, and model version. See Azure OpenAI model versions for available models and versions.
The AppHost reference call configures a connection in the consuming project named after the referenced deployment resource, such as chat in the preceding example.
Error ts(2345) ― Argument of type 'AzureOpenAIDeploymentResource' is not assignable to parameter of type 'IResource'.
Types of property 'withRoleAssignments' are incompatible.
Type '(target: AzureOpenAIResource, roles: AzureOpenAIRole[]) => AzureOpenAIDeploymentResource' is not assignable to type '{ (target: AzureAppConfigurationResource, roles: AzureAppConfigurationRole[]): IResource; (target: AzureOpenAIResource, roles: AzureOpenAIRole[]): IResource; (target: AzureContainerRegistryResource, roles: AzureContainerRegistryRole[]): IResource; (target: AzureEventHubsResource, roles: AzureEventHubsRole[]): IResou...'.
Types of parameters 'target' and 'target' are incompatible.
Property 'addDeployment' is missing in type 'AzureAppConfigurationResource' but required in type 'AzureOpenAIResource'.
Error ts(2345) ― Argument of type 'AzureOpenAIDeploymentResource' is not assignable to parameter of type 'IResource'.
Types of property 'withRoleAssignments' are incompatible.
Type '(target: AzureOpenAIResource, roles: AzureOpenAIRole[]) => AzureOpenAIDeploymentResource' is not assignable to type '{ (target: AzureAppConfigurationResource, roles: AzureAppConfigurationRole[]): IResource; (target: AzureOpenAIResource, roles: AzureOpenAIRole[]): IResource; (target: AzureContainerRegistryResource, roles: AzureContainerRegistryRole[]): IResource; (target: AzureEventHubsResource, roles: AzureEventHubsRole[]): IResou...'.
Types of parameters 'target' and 'target' are incompatible.
Property 'addDeployment' is missing in type 'AzureAppConfigurationResource' but required in type 'AzureOpenAIResource'.
// After adding all resources, run the app...
Referencing chat passes a connection named chat to the consuming project, and referencing embeddings passes a connection named embeddings. Both share the parent Azure OpenAI account.
By default, Aspire provisions Azure OpenAI with disableLocalAuth: true and automatically creates a CognitiveServicesOpenAIUser role assignment for each app that references the resource. This means consuming apps authenticate via managed identity — no API key is needed.
To explicitly assign roles to a consuming app (for example, to grant contributor access for fine-tuning scenarios), call WithRoleAssignments (or withRoleAssignments) on the consuming resource:
Error ts(2345) ― Argument of type 'AzureOpenAIDeploymentResource' is not assignable to parameter of type 'IResource'.
Types of property 'withRoleAssignments' are incompatible.
Type '(target: AzureOpenAIResource, roles: AzureOpenAIRole[]) => AzureOpenAIDeploymentResource' is not assignable to type '{ (target: AzureAppConfigurationResource, roles: AzureAppConfigurationRole[]): IResource; (target: AzureOpenAIResource, roles: AzureOpenAIRole[]): IResource; (target: AzureContainerRegistryResource, roles: AzureContainerRegistryRole[]): IResource; (target: AzureEventHubsResource, roles: AzureEventHubsRole[]): IResou...'.
Types of parameters 'target' and 'target' are incompatible.
Property 'addDeployment' is missing in type 'AzureAppConfigurationResource' but required in type 'AzureOpenAIResource'.
Read access to models, deployments, and completions. Default when using WithReference.
CognitiveServicesOpenAIContributor
Create and delete deployments in addition to user permissions.
CognitiveServicesUser
Broader Cognitive Services access.
To remove the default automatic role assignments and manage them entirely yourself, call ClearDefaultRoleAssignments (or clearDefaultRoleAssignments) on the Azure OpenAI resource:
You might have an already-deployed Azure OpenAI account in your Azure subscription that you want to connect to. Use AsExisting (or asExisting) to point the resource at an existing account instead of provisioning a new one:
Error ts(2345) ― Argument of type 'AzureOpenAIDeploymentResource' is not assignable to parameter of type 'IResource'.
Types of property 'withRoleAssignments' are incompatible.
Type '(target: AzureOpenAIResource, roles: AzureOpenAIRole[]) => AzureOpenAIDeploymentResource' is not assignable to type '{ (target: AzureAppConfigurationResource, roles: AzureAppConfigurationRole[]): IResource; (target: AzureOpenAIResource, roles: AzureOpenAIRole[]): IResource; (target: AzureContainerRegistryResource, roles: AzureContainerRegistryRole[]): IResource; (target: AzureEventHubsResource, roles: AzureEventHubsRole[]): IResou...'.
Types of parameters 'target' and 'target' are incompatible.
Property 'addDeployment' is missing in type 'AzureAppConfigurationResource' but required in type 'AzureOpenAIResource'.
If you’re new to Bicep, it’s a domain-specific language for defining Azure resources. With Aspire, you don’t need to write Bicep by hand — the provisioning APIs generate it for you. When you publish your app, the generated Bicep provisions an Azure Cognitive Services account with standard defaults.
Bicep — openai.bicep
@description('The location for the resource(s) to be deployed.')
The generated Bicep is a starting point and is influenced by changes to the provisioning infrastructure in C#. Direct edits to the Bicep file are overwritten, so make changes through the C# provisioning APIs to ensure they are reflected in the generated output.
All Aspire Azure resources are subclasses of AzureProvisioningResource. This enables customization of the generated Bicep by providing a fluent API to configure Azure resources using the ConfigureInfrastructure API:
For the full reference of Azure OpenAI connection properties — and how consuming apps in C#, TypeScript, Python, and Go read them — see Connect to Azure OpenAI.